必须在C#中手动清理哪些资源,以及不这样做的后果是什么?
例如,假设我有以下代码:
myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black); // Use Brush
如果我不使用dispose方法清理画笔,我假设垃圾收集器释放程序终止时使用的内存?它是否正确?
我需要手动清理哪些其他资源?
处理内部窗口数据结构.
数据库连接.
文件句柄.
网络连接.
COM/OLE引用.
名单还在继续.
Dispose
使用该using
模式调用甚至更好是很重要的.
using (SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black)) { // use myBrush }
如果你不处理某些东西,当垃圾收集器注意到没有更多的引用时,它会被清理掉,这可能需要一段时间.
在这种情况下System.Drawing.Brush
,Windows将保持内存的窗口结构加载到内存中,直到所有程序释放其句柄.
如果你没有处理某些东西,当垃圾收集器注意到你的代码中没有更多的引用时,它会被清理掉,这可能需要一段时间.对于类似的东西,它并不重要,但对于一个打开的文件它可能会.
一般来说,如果某个东西有Dispose方法,你应该在完成它之后调用它,或者,如果可以的话,将它包装在一个using
语句中:
using (SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black)) { // use myBrush }