在C#中需要手动清理哪些资源,不这样做会带来什么后果?
例如,假设我有以下代码:
myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black);
// Use Brush如果我不使用dispose方法清理刷子,我假设垃圾收集器释放程序终止时使用的内存?这是正确的吗?
我还需要哪些其他资源来手动清理?
发布于 2008-09-22 20:01:48
从技术上讲,从IDisposable继承的任何东西都应该主动地处理。您可以使用“使用”语句使事情变得更简单。
http://msdn.microsoft.com/en-us/library/yh598w02.aspx
有时,您将看到在文档示例代码中不一致地使用IDisposable派生对象,以及工具(即visual )生成的代码。
IDisposable的好处在于它使您能够主动释放底层的非托管资源。有时候你真的很想这样做--例如,考虑一下网络连接和文件资源。
发布于 2008-09-22 19:57:24
清单不胜枚举。
调用Dispose非常重要,甚至更好的是,使用using模式。
using (SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black))
{
// use myBrush
}如果您不处理某个东西,当垃圾收集器注意到不再有对它的引用时,它就会被清理掉,这可能是在一段时间之后。
在System.Drawing.Brush的情况下,Windows将保持刷的内部窗口结构加载在内存中,直到所有程序释放它们的句柄。
发布于 2008-09-22 19:59:11
如果您不释放一些东西,当垃圾收集器注意到您的代码中不再有对它的引用时,它就会被清理掉,这可能是在一段时间之后。对于这样的事情,这并不重要,但对于一个打开的文件,它可能会。
通常,如果某物有一个Dispose方法,那么您应该在处理完它之后调用它,或者,如果可能的话,将它封装在一个using语句中:
using (SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black))
{
// use myBrush
}https://stackoverflow.com/questions/117135
复制相似问题