Jes*_*aya 14 c# garbage-collection winforms
我有一个带有析构函数方法的空白Winform
public partial class Form1 : Form
{
public Form1()
{
System.Diagnostics.Trace.WriteLine("Form1.Initialize " + this.GetHashCode().ToString());
InitializeComponent();
}
~Form1()
{
System.Diagnostics.Trace.WriteLine("Form1.Dispose " + this.GetHashCode().ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
当表单被销毁时,我希望它写入输出窗口:
(Form1 opened) Form1.Initialize 41149443 (Form1 closed) Form1.Dispose 41149443
MSDN建议实现析构函数的3种方法:
~Destructor() http://msdn.microsoft.com/en-us/library/66x5fx1b.aspx
IDisposable http://msdn.microsoft.com/en-us/library/system.idisposable.aspx
SafeHandle模式 http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.safehandle.aspx
但是,这些方法都不会将"Form1.Dispose 41149443"写入输出窗口.因此,我无法判断表格是否已被销毁.建议?
由于垃圾收集器的不确定性,我是否应该放弃实现这一目标的希望?
还有另一种方法可以知道Form1是否被垃圾收集?
Dav*_*nan 10
实现你列出的析构函数的三种方法中只有一种实际上涉及析构函数,就是这样~Destructor()
.
如果你实现IDisposable
并处理你的对象,那么代码Dispose
将运行,但是没有理由认为你的析构函数会.
我想你在这里追逐不可能的事情.析构函数在垃圾收集器如此规定时运行.这不是你可以控制的东西.GC完全有权形成这样的观点,即运行析构函数只会浪费时间,如果有足够的内存,它将形成这种观点.
如果您需要可预测的处理,定稿等,请使用IDisposable
.
归档时间: |
|
查看次数: |
21409 次 |
最近记录: |