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

本文关键字:终止 程序 刷新 缓冲区 underyling 侦听器 何确保 确保 跟踪 | 更新日期: 2023-09-27 18:29:05

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

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

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

您可以公开一个手动刷新缓冲区的方法。特别是,当.NET应用程序因未处理的异常而崩溃时,您可以注册AppDomain处理程序。这个处理程序可以调用缓冲区刷新方法。

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

但在一般情况下,您应该在这里刷新缓冲区AppDomain::UnhandledException。

我不认为这会在您故意终止应用程序时刷新缓冲区。

创建一个带有析构函数的对象。清除析构函数。MSDN表示,程序退出时会调用析构函数。我仍在努力找出如果你的程序崩溃,这是否可行。