Этот вид зависит от вашего конкретного случая. Если вы пишете данные примерно раз в секунду, то, скорее всего, вы не увидите значительного влияния прямой записи.
В общем случае запись в FileStream
небольшими кусочками довольно производительна, потому что .NET Framework и ОС обрабатывают буферизацию для вас. Сам файл не будет обновляться, пока буфер не заполнится или вы явно не очистите поток.
Буферизация в памяти - не страшная идея для небольших данных и коротких периодов. Конечно, если ваша программа выдает исключение или кто-то ее убивает до того, как записывает на диск, вы теряете всю эту информацию, что, вероятно, не ваша любимая вещь.
Если вы беспокоитесь о производительности, используйте ветку регистрации. Публикуйте объекты на него через ConcurrentQueue<>
или аналогичный и делайте все записи в отдельном потоке. Очевидно, что многопоточное журналирование является более сложным. Это не то, что я бы посоветовал, если вы действительно действительно не нуждаетесь в дополнительной производительности.
Для быстрой и грязной регистрации я обычно просто использую File.AppendAllText()
или File.AppendAllLines()
, чтобы вытолкнуть данные. Это займет немного больше времени, но это довольно надежно. И я могу прочитать вывод, пока программа еще работает, что часто бывает полезно.