Читает содержимое файла в строку


Вариант 1 - хороший и простой

private void GetFileReady()
{
    private StringBuilder fileContents = new StringBuilder();
    using (var sr = new StreamReader("C:\A big file.txt"))
    {
        fileContents.Append(sr.ReadToEnd());              
    }
}

Вариант 2 - менее простые

private void GetFileReady2()
{
   private StringBuilder fileContents = new StringBuilder();
   const int bufferSize = 1024;
   var buffer = new Char[bufferSize];
   var count = bufferSize;

   using (var sr = new StreamReader("C:\A big file.txt"))
   {                
       while (count > 0)
       {
           count = sr.Read(buffer, 0, bufferSize);
           fileContents.Append(buffer, 0, count);
       }
   }
}

Будет вариант 2 лучше что-нибудь эзотерическое вроде выделения памяти?



10841
1
задан 28 февраля 2011 в 01:02 Источник Поделиться
Комментарии
2 ответа

Цель, чтобы получить строку, содержащую содержимое файла? или чтобы добавить содержимое файла в существующий класса StringBuilder?

если первое, то Вариант 1 может упасть построитель строк всего ... или еще лучше.

string value = File.ReadAllText("C:\A big file.txt");

если это второе, то вы могли бы хотеть думать об использовании класса StringBuilder.EnsureCapacity() , чтобы избежать изменение размера буфера больше, чем нужно.

10
ответ дан 28 февраля 2011 в 01:02 Источник Поделиться

Я не думаю, что есть существенная разница между двумя вариантами, когда дело доходит до выделения памяти. В обоих случаях Вы читаете весь файл в память, которая превосходит любые незначительные различия, которые могут существовать в число объектов, выделенных два варианта. (Хотя оба варианты сразу отбрасываем эти содержания, так как они хранятся только в локальных переменных, но я предполагаю, что это просто сильно упрощенный пример.)

Если вы беспокоитесь о потреблении памяти при использовании большого файла, вы должны не читать весь файл сразу. Вместо этого, вы должны загрузить куски из файла, как это необходимо для вашего приложения, и отказаться от них, когда больше не нужен, поэтому можно высвободить память.

2
ответ дан 28 февраля 2011 в 01:02 Источник Поделиться