Должен ли процесс записи файла с низкими издержками выполняться в собственном потоке? - PullRequest
3 голосов
/ 21 июня 2011

У меня есть приложение wpf, пишущее в текстовый лог-файл довольно редко (от 0,25 до 4 с между записями). Каждая запись представляет собой одну короткую строку текста. Я не краснею после каждой записи.

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

.. Правда ли, что это правильно?
Должен ли я вести процесс регистрации в своем собственном потоке и отправить ему какое-то асинхронное событие для регистрации данных?

Ответы [ 6 ]

2 голосов
/ 21 июня 2011

Могу ли я предложить попробовать Log4Net ? Он обрабатывает все это для вас в очень простой, легкой и простой в использовании упаковке.

2 голосов
/ 21 июня 2011

Взгляните на NLog, Spring или любую из множества платформ регистрации. Сделайте свое приложение крутым и позаботьтесь о том, как лучше вести регистрацию позже. Регистрация вызовов будет производиться из ваших методов графического интерфейса, их реализация должна быть абстрагирована в каркас, чтобы вы могли помещать их в разные потоки и т. Д. При необходимости.

1 голос
/ 21 июня 2011

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

Я думаю, что лучше выбрать поток журналирования.*

1 голос
/ 21 июня 2011

Я думаю, что при такой скорости записи вы получите больше издержек из потока (переключение контекста, синхронизировать его и т. Д.), Чем не сделаете это.

1 голос
/ 21 июня 2011

Файловые записи буферизируются кешем файловой системы. Это займет всего несколько микросекунд. Вам нужно было бы писать со скоростью ~ 10 мегабайт в секунду или иметь сильно фрагментированный жесткий диск, чтобы когда-нибудь заполнить кэш, чтобы вам пришлось ждать диска. Вы не близки к этому в долгосрочной перспективе.

0 голосов
/ 21 июня 2011

Возможно, вы захотите многое сделать в MSDN Рекомендации по управляемой потоковой обработке , особенно примечание о Параллельное программирование в .NET Framework .Кроме того, я бы лично порекомендовал вам полагаться на систему ведения журналов, такую ​​как Apache log4net .

...