MemoryStream.ToBytes()内存泄漏?

时间:2017-04-04 09:03:16

标签: c# memory-leaks memorystream

我有一个内存泄漏问题的应用程序。 在调查时,我发现Byte[]不断增加,所以我使用Red-Gate ANTS Memory Profiler,我看到了一个非常大的byte []实例(16,777,228字节)。当我检查保留图时,它会显示:

现在这对我来说很奇怪,因为我希望看到我的一个类与这个内存流之间的链接。

我的理解缺乏什么?为什么这种记忆增加发生以及如何阻止呢?

谢谢。

2 个答案:

答案 0 :(得分:0)

由.NET直接管理的内存通常不会泄漏&#34;。它是管理的。 MemoryStream 非常类似于List<byte>(更确切地说,它是Stream实施,内部使用byte[],像{{1}一样处理它}} 将)。它非常简单,如果你看看它的代码,你可以在一小时内重写它。里面没有黑魔法。没有搞笑的节目。什么都没有。

所以:

  1. 您将继续引用List<byte>MemoryStream
    1. 您已使用.ToArray()固定.ToArray()的结果。然后.NET就不会释放它。

答案 1 :(得分:0)

你要么

  • 在您的课程中保留对流的引用或
  • 存在一个静态字段/属性。在这两种情况下,对象都不会被释放

在这两种情况下,对象都不会被释放并将被保存在内存中