我是否需要处理在应用程序的整个生命周期中存在的静态对象?
本文关键字:周期 生命 存在 对象 静态 是否 处理 应用程序 | 更新日期: 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