还有比Finalize更多的直接析构函数吗?

时间:2015-09-05 23:19:12

标签: asp.net vb.net

我为.net创建了一个围绕mysql连接器的包装类,使其使用起来更加舒适(以及交换我正在计划的其他事情)。

我的想法是,每次请求时,我都会生成一个包装器的新实例,做任何事情,当请求被响应时,应该销毁包装器对象并在其finalize子句中关闭连接。

我做了一些负载测试但是如果推得足够硬,看起来我用完了池连接,因为包装器对象没有被足够快地破坏。

那么..是否有任何其他我可以覆盖的子,也许是在与所述对象的所有交互完成后立即执行的东西?

1 个答案:

答案 0 :(得分:0)

如果类实现IDisposable,您可以将其用法包装在using块中,一旦块退出就会将其处理掉。您应该对所有实现IDisposable的类执行此操作,以确保及时清理其资源,否则您将受到垃圾收集器的支配。

例如:

Using myObject As New MyWrapperType(wrappedThing) 
    ' Do stuff with myObject
End Using

在C#中

using(var myObject = new MyWrapper(wrappedThing))
{
    // Do stuff with myObject
}

using区块超出范围myObject时,将被处置。

有关详细信息:Using Statement (Visual Basic)

<强>更新

我应该补充一点,如果你要将IDisposable添加到你的包装器中,那么你应该对你要包装的对象调用dispose,这样它们也会在Using块退出时被处理掉。