我正在尝试了解有关Dispose方法的更多信息,以及此过程中发生的事情可能会阻止此对象的垃圾收集。
所以,如果我有:
DateTime _date = DateTime.UtcNow;
public void Dispose()
{
bool append = true;
using(var log = new System.IO.StreamWriter("log.txt", append))
{
log.WriteLine("Logged on: " + _date);
}
}
我在Dispose方法中调用_date会重新生成变量并且不允许GC收集它吗?
这是从我的问题here开始的。
答案 0 :(得分:5)
垃圾收集器对Dispose()
没有任何,所以简单的答案是:完全没有。 GC涉及终结器(~YourType()
),但不 Dispose()
,除非您指的是常见的Dispose(bool disposing) {...}
模式。
其次,DateTime
是struct
,因此不会被垃圾收集。
答案 1 :(得分:2)
绝对不是。 Dispose与垃圾收集基本上没有关系(除了许多实现会调用GC.SuppressFinalize(this)
这一事实。)
dispose模式允许对象的使用者礼貌,并尽快释放非托管资源。垃圾收集是适当时释放托管资源的标准方法。
某些一次性类还实现终结器,这样如果收集对象而不进行处理,则可能会发生紧急释放非托管资源。