我用 C# 工作,而且我对使用相当松懈using
块来声明实现的对象IDisposable
,显然你总是应该这样做。然而,我没有找到一种简单的方法来知道我何时犯了错误。 Visual Studio 似乎没有以任何方式表明这一点(我只是错过了什么吗?)。我是否应该在每次声明任何内容时检查帮助,并逐渐建立一个百科全书式的记忆,哪些对象是一次性的,哪些对象不是一次性的?似乎没有必要、痛苦且容易出错。
How do you处理这个(事情?
EDIT:
查看相关问题侧边栏,我发现另一个问题 https://stackoverflow.com/questions/2785/setting-objects-to-nullnothing-after-use-in-dot-net这表明Dispose()
无论如何,应该由对象的终结器调用。因此,即使您自己从未调用过它,它最终也会发生,这意味着如果您不使用它,就不会出现内存泄漏using
(我想这就是我一直以来真正担心的)。唯一需要注意的是,垃圾收集器不知道对象作为非托管内容保留了多少额外内存,因此它无法准确了解收集对象将释放多少内存。这将导致垃圾收集器的性能不如平时理想。
简而言之,如果我错过了一次,也不是世界末日using
。我只是希望某些东西至少会产生一个警告。
(题外话:为什么没有特殊的降价来链接到另一个问题?)
EDIT:
好吧,好吧,别吵了。这是超级骗子全火戏剧花栗鼠 http://www.youtube.com/watch?v=a1Y73sPHKxw-level 重要的打电话Dispose()
或者我们都会die.
现在。既然如此,为什么这么容易——见鬼,为什么它甚至allowed——做错事了?你必须不遗余力地把事情做好。像其他事情一样这样做会导致世界末日(显然)。封装就这么多吧?
[厌恶地走开]
FxCop might帮助(虽然它没有发现我刚刚向它射击的测试);但是是的:你应该检查一下。IDisposable
它只是系统中非常重要的一部分,您需要养成这个习惯。使用intellisense来寻找.D
是一个好的开始(尽管并不完美)。
然而,不需要很长时间就能熟悉需要处理的类型;例如,通常涉及任何外部事物(连接、文件、数据库)。
ReSharper 也可以完成这项工作,提供“投入使用构造”选项。但它并没有将其作为错误提供......
当然,如果你不确定——try using
它:如果你偏执,编译器会嘲笑你:
using (int i = 5) {}
Error 1 'int': type used in a using statement must be implicitly convertible to 'System.IDisposable'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)