Restsharp: Problema de falta de memória ao enviar arquivos grandes

Criado em 13 out. 2016  ·  7Comentários  ·  Fonte: restsharp/RestSharp

Quando estamos enviando arquivos grandes com RestSharp, aleatoriamente temos alguns problemas de OutOfMemory. Isso acontece porque RestSharp está usando HttpWebRequest em segundo plano e o valor padrão para AllowWriteStreamBuffering é verdadeiro. Isso significa que todo o arquivo é carregado na memória ao fazer a consulta, caso haja algum redirecionamento para poder reproduzi-lo. Mas se estivermos enviando um arquivo de 500 MB, é um problema.

O que precisaríamos é ser capaz de definir AllowWriteStreamBuffering como false, mas não há como alterar AllowWriteStreamBuffering no ConfigureWebRequest.

Algo assim seria suficiente para nossa necessidade:

var request = new RestRequest(Method.POST); request.AllowWriteStreamBuffering = false; request.Files.Add(new FileParameter // ...

help wanted good first issue

Comentários muito úteis

Encontro o mesmo problema e não sei como lidar com

Todos 7 comentários

Observação: para poder testar a pressão da memória de .Net vs RestSharp 105.2.3, veja como o testamos, pois há uma correção de bug não lançada ao usar o .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,
});

alguma atualização disso? Estou tendo exatamente o mesmo problema e me parece razoável expor AllowWriteStreamBuffering no RestClient ou RestRequest. Pelo que eu sei, não há solução alternativa. Meu caso de uso é enviar arquivos paralelos de 100 MB e, se AllowWriteStreamBuffering for verdadeiro, ele lançará exceção de memória com muita frequência.

Encontro o mesmo problema e não sei como lidar com

já está resolvido ????

@AgentCoolDevil você quer ajudar? Faça uma solicitação de pull.

Alguém ainda está recebendo este erro na versão mais recente?

Como @yvesmh corretamente mencionado em # 1213, este problema pode ser resolvido desabilitando o buffer de fluxo de gravação WebRequest . Você pode usar a configuração de solicitação da web em IRestClient para lidar com esses casos.

client.ConfigureWebRequest(x => x.AllowWriteStreamBuffering = false);

Esta página foi útil?
0 / 5 - 0 avaliações