RestSharp を使用して、単純なファイル アップロード デスクトップ ツールを実装しています。カスタム ストリーム ライターを使用して大きなファイルをリクエストに追加すると (GUI へのアップロードの進行状況を更新するため)、stream.Write
OutOfMemoryException がスローされます。簡略化されたコード例:
...
var request = new RestRequest { Resource = "/test" };
request.Method = Method.POST;
request.AddFile("file", writer, "largefile.iso");
var response = client.Execute(request);
...
private void writer(Stream stream)
{
using (FileStream reader = File.OpenRead("d:\\download\\largefile.iso"))
{
byte[] buffer = new byte[16384]; //16k buffer
int bytesRead = 0;
int read = 0;
while ((read = reader.Read(buffer, 0, buffer.Length)) > 0)
{
stream.Write(buffer, 0, read);
bytesRead += read;
System.Diagnostics.Debug.WriteLine("uploading: " + (int) ((double)bytesRead / reader.Length * 100) + "%");
}
reader.Close();
}
}
これは小さなファイルでは問題なく動作しますが、ストリームの書き込みでメモリ リークが発生し、最終的にクラッシュします。私がここで見逃しているものはありますか?