我使用自己的跟踪侦听器将消息输出到文件。为了获得良好的性能,我在App.Config中将autoflush设置为false。因此,我需要确保自己将底层缓冲区始终刷新到磁盘,即使遇到意外/异常程序终止,例如调试时终止程序。我认为这可能是一个普遍的问题,有没有优雅的解决方案?
答案 0 :(得分:1)
不,没有简单的方法可以做到这一点。
您可以公开手动刷新缓冲区的方法。具体来说,当.NET应用程序崩溃时出现未处理的异常,您可以注册AppDomain处理程序。这个处理程序可以调用缓冲区刷新方法。
但是,某些异常可能会或可能不会导致在域中执行未处理的异常处理程序。我相信它们是StackoverflowException
,OutOfMemoryException
和ThreadAbortedException
,也许是CLR本身特有的其他一些内容。
但是在一般情况下,你最好在这里刷新缓冲区AppDomain::UnhandledException。
当你故意杀死一个应用程序时,我认为这不会刷新缓冲区。
答案 1 :(得分:0)
使用析构函数创建对象。冲洗析构函数。程序退出时会调用MSDN says析构函数。我仍然试图找出如果你的程序崩溃,这是否会起作用。