2014-10-24 3 views
0

По какой-то причине мой код полностью разбивает Visual Studio и закрывается.Byte [] to List <string> делает сбой Visual Studio

У меня есть идея, из-за длины строки, поскольку я работаю с ZIP-файлом, который составляет 88 МБ, прежде чем он будет распакован.

Ниже приведен мой код.

Как вы можете видеть, я попытался разделить байт [] на более мелкие части, но это не помогло => Я думаю, что это длина строки, которая заставляет его терпеть неудачу.

byte[] decompressed = Decompress(File.ReadAllBytes(localFilename)); 

List<string> list = null; 
if (decompressed.Length > 50000000) 
{ 
    byte[] first = decompressed.Take(50000000).ToArray(); 
    byte[] second = decompressed.Skip(50000000).ToArray(); 

    string decompressedString = System.Text.Encoding.Default.GetString(first); 
    decompressedString += System.Text.Encoding.Default.GetString(second); 

    string[] decompressedStringArray = decompressedString.Split('\n'); 
    list = new List<string>(decompressedStringArray); 
} 
else 
{ 
    string decompressedString = System.Text.Encoding.Default.GetString(decompressed); 

    string[] decompressedStringArray = decompressedString.Split('\n'); 
    list = new List<string>(decompressedStringArray); 
} 

Любые идеи о том, как я могу улучшить свой код, чтобы он не разбился на Visual Studio? (например, как перейти от байт [] к списку лучше?)

Спасибо большое!

+0

вы попробуете это с небольшой молнией, и она работала нормально? – Noctis

+0

Да, никаких проблем вообще с меньшими молниями. – Louisa

+0

Каков размер данных, и вам действительно нужно удержать все это в массиве в памяти? – Noctis

ответ

0

Простое исправление:

List<string> list = null; 
if (decompressed.Length > 50000000) 
{ 
    byte[] first = decompressed.Take(50000000).ToArray(); 
    string decompressedString = System.Text.Encoding.Default.GetString(first); 
    string[] decompressedStringArray = decompressedString.Split('\n'); 
    list = new List<string>(decompressedStringArray); 

    byte[] second = decompressed.Skip(50000000).ToArray(); 
    decompressedString = System.Text.Encoding.Default.GetString(second); 
    decompressedStringArray = decompressedString.Split('\n'); 
    List<string> list2 = new List<string>(decompressedStringArray); 

    list.AddRange(list2); 
} 
else 
{ 
    string decompressedString = System.Text.Encoding.Default.GetString(decompressed); 

    string[] decompressedStringArray = decompressedString.Split('\n'); 
    list = new List<string>(decompressedStringArray); 
}