为什么在这个例子中使用会增加内存消耗

时间:2017-09-20 09:16:19

标签: c# garbage-collection dispose using

通过阅读这篇文章,我有点困惑:

  

https://www.dotnetperls.com/using

他们证明了调用2个一次性对象,结束了更多的内存使用,而没有using的方法执行相同的指令,使用了较低的内存。

你能解释一下为什么在这个例子中使用会增加内存消耗吗?

我想了解在某些情况下是否应该避免使用。

我认为dispose是一个释放记忆的好主意,但看起来我错了。

1 个答案:

答案 0 :(得分:6)

您似乎在这里混淆了几个问题:

  1. usingDispose()之间的区别是什么?
  2. 您何时应该使用usingDispose()
  3. 但那篇文章说using会占用更多内存吗?
  4. 重复问题的答案会告诉您何时使用using而不是Dispose(),所以我在此不再重复。

    但你什么时候应该使用?请继续阅读。

    Dispose()用于释放非托管资源,而不是内存等托管资源。

    因此,您应该直接或通过Dispose()为任何实现它的类型调用using,除非明确说明您不需要的类型。不要因为有人告诉你内存使用量可能会减少而避免调用它。

    顺便说一下,我对非常对DotNetPearls上的那篇文章表示怀疑。这看起来很糟糕,我甚至不确定他们测量内存使用的方式是否有效。

    回答你的问题:

      

    你能解释一下为什么在这个例子中使用会增加内存消耗吗?

    并非没有尝试重现它 - 但我怀疑他们测量它的方式是不正确的,垃圾收集的变幻莫测产生了误导性的结果。

    请注意文章没有说明他们如何测量内存使用情况,当然也没有给出可编辑的复制。除非提供这些证据,否则我认为他们的报告结果应该被忽略。

    文章关于可能导致“增加”内存使用的结论是无稽之谈:

      

    不需要的使用语句最终浪费了内存。这可以通过方法规模膨胀和增加的复杂性来解释。

    如果查看内存使用情况,它会因运行而异。但是“方法规模膨胀和增加的复杂性”(尽管很小)会导致内存使用量的不断变化。

    很明显,这篇文章的这一部分应该非常谨慎。