この質問は、多数のバイナリ ファイルを SQL Server データベースに転送する効率的な方法のフォローアップ です。
最初に、なぜ usingFile.ReadAllBytes
が急速なメモリ使用を引き起こしているのかを尋ねたところ、そのメソッドを使用すると、実行時に簡単に回収できない大きなオブジェクト ヒープにデータが配置されるという結論に達しました。
私の質問は今、その状況を回避する方法ですか?
using (var fs = new FileStream(path, FileMode.Open))
{
using (var ms = new MemoryStream())
{
byte[] buffer = new byte[2048];
int bytesRead;
while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, bytesRead);
}
return new CustomFile { FileValue = ms.ToArray() };
}
}
次のコードは、ファイルを一度にではなくチャンクで読み取ることによって問題を回避することを目的としていますが、同じ問題があるようです。