Как убедиться, что слушатель трассировки очищает буфер underyling перед завершением программы

Я использую свой собственный слушатель трассировки для вывода сообщения в файлы. Для хорошей производительности я установил для autoflush значение false в своем App.Config. Поэтому я должен убедиться, что основной буфер всегда будет записан на диск, даже если он неожиданно / ненормально завершит работу программы, например, завершит работу программы во время отладки. Я думал, что это может быть общая проблема, есть ли элегантное решение?

2 ответа

Нет, нет простого способа сделать это.

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

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

Но в общем случае вам следует очистить буфер здесь AppDomain:: UnhandledException.

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

Создать объект с деструктором. Флеш в деструкторе. MSDN сообщает, что деструкторы вызываются при выходе из программы. Я все еще пытаюсь выяснить, сработает ли это в случае сбоя вашей программы.

Другие вопросы по тегам