【发布时间】:2010-09-20 06:39:10
【问题描述】:
我在 C# 中工作,我一直在使用 using 块来声明实现 IDisposable 的对象,这显然是你应该做的。但是,我看不到一个简单的方法来知道我何时滑倒。 Visual Studio 似乎没有以任何方式表明这一点(我只是错过了什么吗?)。我是不是应该在每次声明任何东西时检查帮助,并逐渐建立一个百科全书式的记忆,哪些对象是一次性的,哪些不是一次性的?似乎没有必要、痛苦且容易出错。
你如何处理这个问题?
编辑:
查看相关问题侧边栏,我发现another question 清楚地表明Dispose() 无论如何都应该由对象的终结器调用。因此,即使您从未自己调用它,它最终也应该会发生,这意味着如果您不使用 using(我想这是我一直以来真正担心的问题),您将不会发生内存泄漏。唯一需要注意的是,垃圾收集器不知道对象作为非托管对象持有多少额外内存,因此它无法准确知道通过收集对象将释放多少内存。这将导致垃圾收集器的性能不如平时理想。
简而言之,如果我错过了using,这并不是世界末日。我只是希望某些东西至少会产生一个警告。
(题外话:为什么没有特殊的markdown链接到另一个问题?)
编辑:
好吧,好吧,别吵了。打电话给Dispose() 是超级骗子dramatic-chipmunk 级别重要,否则我们都会死。
现在。鉴于此,为什么这么容易——见鬼,为什么甚至允许——做错事?你必须不遗余力地做正确的事。像其他所有事情一样这样做会导致世界末日(显然)。封装这么多吧?
[大吃一惊,厌恶]
【问题讨论】:
-
你不会在这个星球上找到一个有经验的 .net 程序员会同意你的看法。我并不是要夸张,但你真的应该选择一本好的 .Net 书。
-
@Atario - 你真的应该考虑改变接受的答案;坦率地说,Timwi 是错误的——或者充其量是过度简化事情,以至于两者(错误与简化)非常接近。
-
您应该尽快调用 dispose,因为它可能会在下一次垃圾回收完成之前很久就释放资源。如果一个对象正在使用您的服务器或桌面上的资源,该资源将由 Dispose() 释放,您真的要等待垃圾收集器处理它吗?
标签: c# .net visual-studio idisposable using-statement