私はメモリストリームを使用していますが、メモリ不足の例外でいくつかの問題が発生しています。問題の原因となっている方法は次のとおりです。
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 ステートメントを修正しましたが、問題はまだ存在します。キャッチしていただきありがとうございます。