【发布时间】:2012-08-13 16:54:27
【问题描述】:
我有以下代码:
const int bufferSize = 1024 * 1024;
var buffer = new byte[bufferSize];
for (int i = 0; i < 10; i++)
{
const int writesCount = 400;
using (var stream = new MemoryStream(writesCount * bufferSize))
{
for (int j = 0; j < writesCount; j++)
{
stream.Write(buffer, 0, buffer.Length);
}
stream.Close();
}
}
我在 32 位机器上运行。
第一次迭代完成得很好,然后在下一次迭代中我在news MemoryStream 的行上得到一个System.OutOfMemoryException 异常。
尽管using 声明,为什么没有回收之前的MemoryStream 内存?如何强制释放MemoryStream 使用的内存?
【问题讨论】:
-
您是否尝试过强制垃圾收集器运行?
-
顺便说一句,在写入
MemoryStream的实例之后,您将在不保存流内容的情况下将其释放到别处。如果写入后未使用流,为什么要写入流? -
@Serge:这是一个说明问题的sn-p,这就是原因。
-
其实你不必打电话给
stream.Close()。using将接听电话stream.Dispose(),而后者又调用了Close()。 click here for further reading -
使用较小的缓冲区和/或重复使用它们。
标签: c# .net memory-management garbage-collection idisposable