У меня есть веб-приложение, которое будет записывать некоторую информацию в файл. Я ищу простой потокобезопасный неблокирующий класс регистратора файлов в C#. У меня мало опыта с потоками. Я знаю, что там есть большие компоненты регистрации, такие как log4Net, Блок регистрации журналов предприятия, ELMAH, но я не хочу внешней зависимости для моего приложения. Я думал об использовании этой реализации очереди http://www.codeproject.com/KB/cpp/lockfreeq.aspxПростой потокобезопасный неблокирующий класс регистратора файлов в C#
ответ
Метод FileStream.BeginWrite подталкивает операцию записи к потоку, который управляется системой. Это легкий бит.
Если вы отправляете сообщения в синхронизированную очередь и используете метод EndWrite, вытащите следующий элемент из очереди, то все ваши протоколирования будут отключены от приложения.
Последним шагом является перенос сообщений в очередь для установки события, так что если очередь пуста, когда EndWrite приходит для поиска следующего сообщения, она может дождаться, когда будет установлено событие.
, если вы не хотите использовать внешнюю библиотеку, вы можете использовать Trace класс
Я сделал простой механизм протоколирования в моем проекте в офисе.
У меня есть класс журнала, который является общим (Static C#).
Внутри этого класса у меня есть синхронизированная очередь, и у нее есть собственный поток.
После этого внутри этой темы я просто использую AutoresetEvent с вашим собственным WaitTime (я использую 250 мс).
Затем, когда этот ResetEvent истечет, я собираю то, что находится в очереди (используя DeQueue), и записывайте каждый файл в файл.
Что нужно помнить ... У вас есть класс или структура, которые могут содержать дату, когда вход вошел, а не время, которое вы написали на диск, если вы выберете более длинное время, чтобы спать в вашей теме.
Если вы хотите, чтобы ваше приложение быстро вышло, выведите метод, который установит событие, чтобы вынуть его из сна и изящно выйти.
Я также проголосую за класс Trace, если внешняя зависимость не требуется. Кроме того, многие разработчики просто добавляют компоненты, такие как Log4net и Enterprise Lib, без учета сложности их приложения. Классы Debug и Trace в .NET могут быть достаточными для многих приложений малого и среднего размера. Вы можете настроить их поведение, изменив записи конфигурации или написав собственный TraceListener. – A9S6