Как убедиться, что слушатель трассировки очищает буфер underyling перед завершением программы
Я использую свой собственный слушатель трассировки для вывода сообщения в файлы. Для хорошей производительности я установил для autoflush значение false в своем App.Config. Поэтому я должен убедиться, что основной буфер всегда будет записан на диск, даже если он неожиданно / ненормально завершит работу программы, например, завершит работу программы во время отладки. Я думал, что это может быть общая проблема, есть ли элегантное решение?
2 ответа
Нет, нет простого способа сделать это.
Вы можете выставить метод, который вручную очищает буферы. В частности, когда происходит сбой приложения.NET с необработанным исключением, вы можете зарегистрировать обработчик AppDomain. Этот обработчик может вызвать метод очистки буфера.
Однако некоторые исключения могут или не могут привести к выполнению обработчика необработанных исключений в домене. Я верю, что они StackruException
, OutOfMemoryException
а также ThreadAbortedException
, возможно, несколько других специфических для самой CLR.
Но в общем случае вам следует очистить буфер здесь AppDomain:: UnhandledException.
Я не думаю, что это очистит буферы, когда вы намеренно убьете приложение.
Создать объект с деструктором. Флеш в деструкторе. MSDN сообщает, что деструкторы вызываются при выходе из программы. Я все еще пытаюсь выяснить, сработает ли это в случае сбоя вашей программы.