Wil*_*Jr. 3 c# memory-management
我有一个类产生另一个UI线程,并做它的事情.我需要中止该线程并在我的父类被销毁时进行清理.那么我怎么知道我的父班什么时候被毁坏了呢?
来自C++,我首先想到的是将它放在析构函数中.但是C#并没有任何析构函数 - 只有终结器和处理器 - 根据我的理解 - 可能会也可能不会被调用(我猜这对于GC来说是情绪化的事情).
这非常简单 - 如果您可能想要或不想释放您的资源.
但是,只要对象被销毁,你在哪里放置绝对必须执行的代码?
你把它放入Dispose(实现IDisposable接口),然后确保Dispose在不再需要该对象时调用它.有一种语言结构可以做到这一点:
using (var foo = new Foo())
{
// Do something with foo.
}
Run Code Online (Sandbox Code Playgroud)
foo.Dispose将在using块结束时调用.这相当于:
{
var foo = new Foo();
try
{
// Do something with foo.
}
finally
{
foo.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,Dispose是不是当对象离开范围自动调用; 你需要自己做,使用一个using块或明确地调用它.
但是,您应该在Foo该调用中提供终结器Dispose,以便如果在GC到达之前未处置该对象,则不会留下未发布的资源:
~Foo()
{
Dispose();
}
Run Code Online (Sandbox Code Playgroud)
IDisposable模式背后的想法是它明确告诉你类何时需要处理.这篇文章描述了如何正确实现它(考虑可能的后代类).
| 归档时间: |
|
| 查看次数: |
255 次 |
| 最近记录: |