首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >必须在C#中手动清理的资源?

必须在C#中手动清理的资源?
EN

Stack Overflow用户
提问于 2008-09-22 19:54:04
回答 14查看 2.2K关注 0票数 11

在C#中需要手动清理哪些资源,不这样做会带来什么后果?

例如,假设我有以下代码:

代码语言:javascript
复制
myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black);
// Use Brush

如果我不使用dispose方法清理刷子,我假设垃圾收集器释放程序终止时使用的内存?这是正确的吗?

我还需要哪些其他资源来手动清理?

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2008-09-22 20:01:48

从技术上讲,从IDisposable继承的任何东西都应该主动地处理。您可以使用“使用”语句使事情变得更简单。

http://msdn.microsoft.com/en-us/library/yh598w02.aspx

有时,您将看到在文档示例代码中不一致地使用IDisposable派生对象,以及工具(即visual )生成的代码。

IDisposable的好处在于它使您能够主动释放底层的非托管资源。有时候你真的很想这样做--例如,考虑一下网络连接和文件资源。

票数 1
EN

Stack Overflow用户

发布于 2008-09-22 19:57:24

  • 内部windows数据结构的句柄。
  • 数据库连接。
  • 文件句柄。
  • 网络连接。
  • COM/OLE参考资料

清单不胜枚举。

调用Dispose非常重要,甚至更好的是,使用using模式。

代码语言:javascript
复制
using (SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black))
{
    // use myBrush
}

如果您不处理某个东西,当垃圾收集器注意到不再有对它的引用时,它就会被清理掉,这可能是在一段时间之后。

System.Drawing.Brush的情况下,Windows将保持刷的内部窗口结构加载在内存中,直到所有程序释放它们的句柄。

票数 7
EN

Stack Overflow用户

发布于 2008-09-22 19:59:11

如果您不释放一些东西,当垃圾收集器注意到您的代码中不再有对它的引用时,它就会被清理掉,这可能是在一段时间之后。对于这样的事情,这并不重要,但对于一个打开的文件,它可能会。

通常,如果某物有一个Dispose方法,那么您应该在处理完它之后调用它,或者,如果可能的话,将它封装在一个using语句中:

代码语言:javascript
复制
using (SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black))
{
    // use myBrush
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/117135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档