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

Mar*_*rno -2 c# garbage-collection dispose using

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

https://www.dotnetperls.com/using

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

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

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

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

Mat*_*son 6

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

  1. using和之间有什么区别Dispose()
  2. 当你应该使用usingDispose()
  3. 但是那篇说using使用更多内存的文章呢?

重复问题的答案会告诉您何时使用using而不是Dispose(),所以我不会在此重复.

但是什么时候应该使用?继续阅读.

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

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

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

在回答你的问题时:

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

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

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

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

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

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

很明显,应该非常谨慎地处理这篇文章的这一部分.

  • @MarcoSalerno除非类型的文档另有说明,否则你应该总是调用它.忽略那篇关于内存使用的文章中的废话.这是一个糟糕的建议. (4认同)