gpt4 book ai didi

C# 垃圾收集器似乎过早关闭了我的 StreamWriter

转载 作者:太空狗 更新时间:2023-10-29 21:05:54 26 4
gpt4 key购买 nike

我有一个单例记录器类。在它的析构函数中,我调用 Close() 打印日志的页脚,然后关闭 StreamWriter。

 public void Close()
{
WriteLogFileFooter();

_logFile.Flush();

_logFile.Close();
}

问题是当从程序的其他地方调用 System.Enviornment.Exit(1) 时(我自己没有写的部分),页脚永远不会打印,我的记录器抛出一个异常试图写入一个关闭流。我只能假设 Exit 命令导致我的 StreamWriter 在我的 Singleton 被破坏之前关闭。我尝试在我的 StreamWriter 上使用 GC.SupressFinalize(),但这似乎没有帮助。

最佳答案

您违反了终结器的一项明确规则:

The Finalize method should not reference any other objects.

http://msdn.microsoft.com/en-us/library/b1yfkh5e(v=VS.90).aspx

当应用程序退出时,您引用的托管对象完全有可能在您的对象被收集之前被收集。

更新

如果您需要在应用程序退出时清理托管资源,您可以连接 ProcessExit AppDomain 的事件,而不是依赖终结器执行的非确定性行为。

.NET Console Application Exit Event

关于C# 垃圾收集器似乎过早关闭了我的 StreamWriter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11348987/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com