如何确保跟踪侦听器在程序终止之前刷新底层缓冲区

时间:2013-08-27 09:17:14

标签: c# io tracing

我使用自己的跟踪侦听器将消息输出到文件。为了获得良好的性能,我在App.Config中将autoflush设置为false。因此,我需要确保自己将底层缓冲区始终刷新到磁盘,即使遇到意外/异常程序终止,例如调试时终止程序。我认为这可能是一个普遍的问题,有没有优雅的解决方案?

2 个答案:

答案 0 :(得分:1)

不,没有简单的方法可以做到这一点。

您可以公开手动刷新缓冲区的方法。具体来说,当.NET应用程序崩溃时出现未处理的异常,您可以注册AppDomain处理程序。这个处理程序可以调用缓冲区刷新方法。

但是,某些异常可能会或可能不会导致在域中执行未处理的异常处理程序。我相信它们是StackoverflowExceptionOutOfMemoryExceptionThreadAbortedException,也许是CLR本身特有的其他一些内容。

但是在一般情况下,你最好在这里刷新缓冲区AppDomain::UnhandledException

当你故意杀死一个应用程序时,我认为这不会刷新缓冲区。

答案 1 :(得分:0)

使用析构函数创建对象。冲洗析构函数。程序退出时会调用MSDN says析构函数。我仍然试图找出如果你的程序崩溃,这是否会起作用。