C# Dispose中的成员变量访问
我试图了解更多关于Dispose方法的信息,以及在这个方法中发生的事情如何可能会暂停这个对象的垃圾收集 因此,如果我有:C# Dispose中的成员变量访问,c#,dispose,C#,Dispose,我试图了解更多关于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: " +
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收集该变量
这是从我的问题开始的。垃圾收集器与
Dispose()
没有任何关系,因此简单的答案是:根本没有。GC涉及终结器(~YourType()
),但不涉及Dispose()
,除非您指的是公共Dispose(bool disposing){…}
模式
其次,
DateTime
是一个struct
,因此不会被垃圾收集。垃圾收集器与Dispose()
没有任何关系,因此简单的答案是:根本没有。GC涉及终结器(~YourType()
),但不涉及Dispose()
,除非您指的是公共Dispose(bool disposing){…}
模式
其次,
DateTime
是一个struct
,因此不会被垃圾收集。绝对不会。Dispose本质上与垃圾收集无关(除了许多实现将调用GC.SuppressFinalize(this)
)
dispose模式允许对象的使用者保持礼貌,并尽快释放非托管资源。垃圾收集是适当时释放托管资源的标准方法
一些一次性类还将实现终结器,这样,如果收集对象而不进行处置,则可以紧急释放非托管资源。绝对不会。Dispose本质上与垃圾收集无关(除了许多实现将调用
GC.SuppressFinalize(this)
)
dispose模式允许对象的使用者保持礼貌,并尽快释放非托管资源。垃圾收集是适当时释放托管资源的标准方法
一些一次性类还将实现终结器,这样,如果收集对象而不进行处置,则可以紧急释放非托管资源。1。Dispose与GC无关。2.Dispose永远不应该抛出异常,但是你的代码很容易抛出异常。那么这是上面代码的唯一真正问题吗?它可能会抛出异常,但仍能正确收集?@Richard-它不会抛出,所有内容都会被收集。@Henk-它不会抛出,因为写入文件时出现问题(磁盘已满或类似情况)?是的,该部分可能会抛出。但是实际上GC和Dispose是不相关的。Dispose与GC无关。2.Dispose永远不应该抛出异常,但是你的代码很容易抛出异常。那么这是上面代码的唯一真正问题吗?它可能会抛出异常,但仍能正确收集?@Richard-它不会抛出,所有内容都会被收集。@Henk-它不会抛出,因为写入文件时出现问题(磁盘已满或类似情况)?是的,该部分可能会抛出。但实际上GC和Dispose是不相关的。