我是否需要处理在应用程序的整个生命周期中存在的静态对象?

本文关键字:周期 生命 存在 对象 静态 是否 处理 应用程序 | 更新日期: 2023-09-27 18:11:37

假设我想做一些日志记录,我要做的第一件事是打开一个FileStream来写。

我想为应用程序重用相同的流,而不是为每个日志条目打开和关闭流

这意味着流将与应用程序一样存在。

之类的
public static class Logger
{
    static StreamWriter SW;
}

现在的问题是,我是否需要创建一个close方法将Dispose SW命名为Window.Closed

我觉得GC能够正确地完成它的工作,并在应用程序结束时释放SW。但我想确保不这样做不会导致应用程序在某些特殊情况下挂起。

我是否需要处理在应用程序的整个生命周期中存在的静态对象?

…答案是当应用程序关闭时,所有的资源将被操作系统释放。

正确,但是释放资源并不意味着它是以干净的方式释放的。

您需要处理StreamWriter,因为默认情况下它不会立即刷新它的数据。如果在应用程序关闭之前没有关闭/处置它,那么最后一位文本将不会被写出来。

class Program
{
    static StreamWriter SW = new StreamWriter("test.txt");
    static void Main()
    {
        SW.Write("Test");
    }
}

运行上述程序后,文本文件将不包含单词Test

如果您将SW.AutoFlush = true;添加到程序中,您可以不处理它。但是在处理任何实现IDisposeable

的类时,您需要注意这样的限制