我正在使用内存流,并且遇到了一些内存不足异常的问题。导致问题的方法如下。
public override T Deserialize<T>(byte[] source)
{
using (var stream = new MemoryStream(source))
{
var result = (T)_formatter.Deserialize(stream);
return result;
}
}
这是一个典型的调用:
var bufferSize = binaryArrays.Sum(x => x.Length);
var streamBuffer = new byte[bufferSize];
using (var stream = new MemoryStream(streamBuffer))
{
foreach (var binaryArray in binaryArrays)
{
stream.Write(binaryArray, 0, binaryArray.Length);
}
result = serializer.Deserialize<T>(stream.ToArray());
}
我已经IDisposable
在这个方法的包含类中实现了,并且我明确地处理了流(即使它不应该是必要的),但我无法回收我的内存。我知道这是因为 MemoryStream 的底层缓冲区仍在浮动,并且我的应用程序的虚拟内存已耗尽。那么,如何杀死底层缓冲区呢?有什么我可以在这里使用的技术吗?
非常感谢。
[编辑]
我修复了 using 语句,但问题仍然存在。谢谢你的收获。