通过阅读这篇文章,我有点困惑:
他们证明了调用2个一次性对象,结束了更多的内存使用,而没有using
的方法执行相同的指令,使用了较低的内存。
你能解释一下为什么在这个例子中使用会增加内存消耗吗?
我想了解在某些情况下是否应该避免使用。
我认为dispose
是一个释放记忆的好主意,但看起来我错了。
答案 0 :(得分:6)
您似乎在这里混淆了几个问题:
using
和Dispose()
之间的区别是什么?using
或Dispose()
?using
会占用更多内存吗?重复问题的答案会告诉您何时使用using
而不是Dispose()
,所以我在此不再重复。
但你什么时候应该使用?请继续阅读。
Dispose()
用于释放非托管资源,而不是内存等托管资源。
因此,您应该直接或通过Dispose()
为任何实现它的类型调用using
,除非明确说明您不需要的类型。不要因为有人告诉你内存使用量可能会减少而避免调用它。
顺便说一下,我对非常对DotNetPearls上的那篇文章表示怀疑。这看起来很糟糕,我甚至不确定他们测量内存使用的方式是否有效。
回答你的问题:
你能解释一下为什么在这个例子中使用会增加内存消耗吗?
并非没有尝试重现它 - 但我怀疑他们测量它的方式是不正确的,垃圾收集的变幻莫测产生了误导性的结果。
请注意文章没有说明他们如何测量内存使用情况,当然也没有给出可编辑的复制。除非提供这些证据,否则我认为他们的报告结果应该被忽略。
文章关于可能导致“增加”内存使用的结论是无稽之谈:
不需要的使用语句最终浪费了内存。这可以通过方法规模膨胀和增加的复杂性来解释。
如果查看内存使用情况,它会因运行而异。但是“方法规模膨胀和增加的复杂性”(尽管很小)会导致内存使用量的不断变化。
很明显,这篇文章的这一部分应该非常谨慎。