2016-09-14 7 views
-1

У меня есть программа, которая будет работать в течение длительного времени (часы) и регулярно записывать вывод в текстовый файл.Буферизованный StreamWriter для записи в течение длительного периода времени

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

Первый вопрос: будут ли проблемы с производительностью (или другими видами) для непрерывного хранения потока в файл?

Если это так, будет ли StreamWriter (открыт с помощью конструктора имен файлов) управлять открытием и закрытием файла на обычной буферной основе для меня или он будет хранить файл открытым на время его существования?

Наконец, существует ли встроенная опция для обработки этих более длительных записей? Или мне нужна пользовательская реализация Writer/Stream?

ответ

0

Лично я хотел бы использовать одну из подпрограмм File.Appendxxx, которые открывают файл, добавляют данные и снова закрывают их.

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

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

StreamWriter/FileStream и т. Д. Обычно удерживают файл открытым до тех пор, пока вы его не уничтожите.

0

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

Ответ Уилла предоставляет решение для открытия и добавления файла в случае необходимости. Дело здесь в том, что файл не записывается на 24/7, тогда нет причин, по которым его не следует закрывать.

Чтобы ответить на ваш вопрос в смысле файла, который должен быть открыт 24/7. Я бы использовал асинхронные методы для записи в файл с помощью задач. Таким образом, вы можете затем вызвать другую задачу, чтобы написать резервную копию файла, например, каждый день. Резервный файл позволит вам просмотреть информацию производственного файла.

Смежные вопросы