Gar*_*hby 11 c# resources garbage-collection memory-management
必须在C#中手动清理哪些资源,以及不这样做的后果是什么?
例如,假设我有以下代码:
myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black);
// Use Brush
Run Code Online (Sandbox Code Playgroud)
如果我不使用dispose方法清理画笔,我假设垃圾收集器释放程序终止时使用的内存?它是否正确?
我需要手动清理哪些其他资源?
名单还在继续.
Dispose
使用该using
模式调用甚至更好是很重要的.
using (SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black))
{
// use myBrush
}
Run Code Online (Sandbox Code Playgroud)
如果你不处理某些东西,当垃圾收集器注意到没有更多的引用时,它会被清理掉,这可能需要一段时间.
在这种情况下System.Drawing.Brush
,Windows将保持内存的窗口结构加载到内存中,直到所有程序释放其句柄.
如果你没有处理某些东西,当垃圾收集器注意到你的代码中没有更多的引用时,它会被清理掉,这可能需要一段时间.对于类似的东西,它并不重要,但对于一个打开的文件它可能会.
一般来说,如果某个东西有Dispose方法,你应该在完成它之后调用它,或者,如果可以的话,将它包装在一个using
语句中:
using (SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black))
{
// use myBrush
}
Run Code Online (Sandbox Code Playgroud)
从技术上讲,任何继承自 IDisposable 的内容都应该主动处置。您可以使用“using”语句使事情变得更容易。
http://msdn.microsoft.com/en-us/library/yh598w02.aspx
有时,您会在文档示例代码以及工具(即 Visual Studio)生成的代码中看到 IDisposable 派生对象的使用不一致。
IDisposable 的优点在于它使您能够主动释放底层非托管资源。有时您确实想这样做 - 例如考虑网络连接和文件资源。
归档时间: |
|
查看次数: |
1912 次 |
最近记录: |