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

时间:2016-10-05 18:48:27

标签: c#

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

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

这意味着只要应用程序,流就会存在。

类似

public static class Logger
{
    static StreamWriter SW;
}

现在问题是,我是否需要制作一个密切的方法Dispose SW并将其称为Window.Closed

之类的地方

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

1 个答案:

答案 0 :(得分:1)

  

...答案说当应用程序关闭时,操作系统将释放所有资源。

是的,但仅仅因为资源被释放并不意味着它以一种干净的方式被释放。

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

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

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

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

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