作为标题,当处理表单时,所有form
数据和datasets
也被处理?
示例:
Dim C As New Commands
C.ShowDialog
C.Disopse()
因此C
表单包含datasets
和oledbconnections
以及未处置的更多对象。如果没有,什么是释放内存和释放所有资源的最佳方法?
答案 0 :(得分:0)
与其他.NET对象一样,您无法保证在处理表单时将处置数据集。这是因为.NET会持续监视是否存在指向内存中对象的活动指针。如果未找到链接,则释放分配给对象的内存。这个过程称为garbage collection - CLR的一个特征。
问题在于,您可以拥有一个指向同一数据集的变量,另一个表单,类甚至另一个项目。您可以根据需要生成尽可能多的变量。作为开发人员,您必须制定策略来控制谁消耗您的对象以及如何使用对象。否则,您永远不会知道在任何特定时刻是否实际处理了特定数据集。
Using clause有助于控制对象的处理,但它不是最终的解决方案。如果你不知道自己在做什么,你仍然会遇到麻烦。有时您需要将未使用的连接对象故意传递给其他函数,以便更精细地控制数据处理。
答案 1 :(得分:0)
表单的.Dispose()方法用于处理表单使用的其他非托管GDI资源。由于该方法对您可能添加的内容一无所知,因此无法确定数据集等项目也会被处理掉。
你可以期待的最好的是,因为Dispose() - 表格也高度表明该表格即将符合垃圾收集资格,你的其他资源也可能有资格进行垃圾收集。 如果这些类型的Dispose()和终结器模式已正确实现,那么很可能您的其他项目将很快被处理掉。只是多久不可能说......这就是存在处置模式的原因:在那些需要确保非托管资源被立即清理的时候。
我建议释放任何其他资源的方法是覆盖正常的Windows窗体Dispose()方法。您的Dispose()方法的新实现将使用MyBase关键字调用基本实现,并且还为表单的任何IDisposable成员调用Dispose()。这样,表单仍然可以作为Using块的一部分正常工作。