Должен ли я сначала создать строку, а затем записать в файл? - PullRequest
3 голосов
/ 02 марта 2011

Программа, над которой я сейчас работаю, должна сгенерировать файл.Лучше ли мне сначала сгенерировать содержимое файла в виде строки, а затем записать эту строку в файл, или мне просто нужно напрямую добавить содержимое в файл?

Есть ли преимущества одного над другим??

Размер файла будет около 0,5 - 1 МБ.

Ответы [ 3 ]

9 голосов
/ 02 марта 2011

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

Однако выс большей вероятностью возникнут проблемы с частично записанным файлом, поскольку вы выполняете ввод-вывод в течение определенного периода времени, а не за один раз.

Лично я бы собрал его, используяStringBuilder, а затем записать все это на диск за один раз.

2 голосов
/ 02 марта 2011

Я думаю, что в целом лучше создать StreamWriter и просто написать в него.Зачем хранить вещи в памяти, когда это не нужно?И это намного проще.Например:

using (var writer = new StreamWriter("filename"))
{
    writer.WriteLine(header);
    // write all your data with Write and WriteLine,
    // taking advantage of composite formatting
}

Если вы хотите построить несколько строк с StringBuilder, вы должны написать что-то вроде:

var sb = new StringBuilder();
sb.AppendLine(string.Format("{0:N0} blocks read", blocksRead));
// etc., etc.
// and finally write it to file
File.WriteAllText("filename", sb.ToString());

Конечно, есть и другие варианты.Вы можете построить линии в List<string> и затем использовать File.WriteAllLines.Или вы можете написать в StringStream, а затем записать это в файл.Но все эти подходы требуют многократной обработки данных.Просто откройте StreamWriter и напишите.

Основные причины, по которым я считаю, что в целом лучше перейти непосредственно к выводу:

  • Вам не нужно реорганизовывать кодкогда выясняется, что ваши выходные данные слишком велики, чтобы уместиться в память.
  • В любом случае, запланированный пункт назначения - это файл, так зачем дурачиться с форматированием в памяти перед записью в файл?
  • API для записи нескольких строк в текстовый файл, на мой взгляд, чище, чем API для добавления строк в StringBuilder.
0 голосов
/ 02 марта 2011

Я думаю, что лучше использовать строку или построитель строк для хранения ваших данных, тогда как вы можете записать в файл, используя функции File.Write.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...