RestSharpを使用して大きなファイルをアップロードすると、OutOfMemoryの問題がランダムに発生します。 これは、RestSharpがバックグラウンドでHttpWebRequestを使用しており、AllowWriteStreamBufferingのデフォルト値がtrueであるために発生します。 これは、クエリを実行するときに、ファイルを再生できるようにするためのリダイレクトがある場合に備えて、ファイル全体がメモリにロードされることを意味します。 しかし、500 mbのファイルをアップロードする場合は、問題があります。
AllowWriteStreamBufferingをfalseに設定できるようにする必要がありますが、現時点では、ConfigureWebRequestのAllowWriteStreamBufferingを変更する方法はありません。
このようなものは私たちの必要性のために十分でしょう:
var request = new RestRequest(Method.POST);
request.AllowWriteStreamBuffering = false;
request.Files.Add(new FileParameter // ...
注:.NetとRestSharp 105.2.3のメモリ不足をテストできるようにするために、.AddFileを使用すると未リリースのバグ修正があるため、次のようにテストしました。
// In the current implementation of RestSharp, there is an issue when using AddFile with a writer.
// It doesn't set the ContentLength, which break the queries with System.Net.ProtocolViolationException as we are not uploading
// the expected amount of bytes. It's fixed in an yet unreleased version, so we are using the Files.Add manually for now.
var request = new RestRequest(Method.POST);
request.Files.Add(new FileParameter
{
Name = "file",
Writer = outStream => inStream.CopyTo(outStream),
FileName = fileName,
ContentLength = inStream.Length,
});
これに関する更新はありますか? 私はまったく同じ問題を抱えており、RestClientまたはRestRequestのいずれかでAllowWriteStreamBufferingを公開することは合理的であるように思われます。 私の知る限り、回避策はありません。 私のユースケースでは、100 MBのファイルを並列に送信し、AllowWriteStreamBufferingがtrueの場合、メモリ不足の例外を頻繁にスローします。
私は同じ問題に遭遇し、対処する方法がありません
それはまだ解決されていますか????
@AgentCoolDevilあなたが助けたいですか? プルリクエストを実行します。
最新バージョンでもこのエラーが発生する人はいますか?
@yvesmhが#1213でWebRequest
書き込みストリームのバッファリングを無効にすることで解決できます。 IRestClient
のWebリクエスト構成を使用して、このようなケースを処理できます。
client.ConfigureWebRequest(x => x.AllowWriteStreamBuffering = false);
最も参考になるコメント
私は同じ問題に遭遇し、対処する方法がありません