2012-01-24 16 views
7

Estoy utilizando RestSharp en un proyecto Mono para cargar algunos archivos y me he dado cuenta de que cuando se carga un archivo grande, la memoria crece sustancialmente.RestSharp está cargando todo el archivo en la memoria durante la carga. ¿Cómo evitarlo?

En cuanto a RestSharp source code Me di cuenta de que FileParameter espera una matriz de bytes, lo que significa que realmente está cargando el archivo en la memoria.

¿Estoy haciendo algo mal? ¿Hay alguna manera de que RestSharp no haga esto? Puede que esté subiendo archivos realmente grandes, así que cargarlos desde la memoria no es una opción.

Cualquier ayuda (incluso diciéndome que use otra biblioteca HTTP disponible en mono) es bienvenida.

+0

Alguien escribió una forma de reproducir archivos. Trataré de localizarlo para responder la pregunta. –

Respuesta

4

Y me di por vencido después de encontrar this line, por lo cuerpos de solicitud siempre se cargan en la memoria, lo cual es lamentable, por lo que he construido una solución simple de hacer la carga de archivos basado en el código de this question y de la depuración de la Apache HttpClient library.

En caso de que alguien esté interesado, la fuente está disponible here.

+0

Creo que el código cambió. ¿Podrías actualizar el enlace para apuntar a un compromiso específico + línea no? –

+0

A partir de 2015, parece que está [transmitiendo correctamente el cuerpo] (https://github.com/restsharp/RestSharp/blob/62335a677c92ad45d9dc3214ff6765b597d8642f/RestSharp/Http.Sync.cs#L226), específicamente en ['WriteMultipartFormData'] (https://github.com/restsharp/RestSharp/blob/bf9b79614d7fc3468d2a830e2e65977a0c3246c2/RestSharp/Http.cs#L390) – drzaus

4

Utilice la sobrecarga AddFile(name, writer, filename).

Para el parámetro writer, pase Action<Stream> que escribe directamente en la secuencia del cuerpo de la solicitud. No cierre la secuencia

Here's an example for writing to the stream.

+4

No hay salida, el cuerpo siempre se carga en la memoria -> https://github.com/restsharp/RestSharp/blob/master/RestSharp/RestClient.cs#L433 –

+0

A partir de 2015, parece que está [adecuadamente transmitiendo el cuerpo] (https://github.com/restsharp/RestSharp/blob/62335a677c92ad45d9dc3214ff6765b597d8642f/RestSharp/Http.Sync.cs#L226), específicamente en ['WriteMultipartFormData'] (https://github.com/restsharp/ RestSharp/blob/bf9b79614d7fc3468d2a830e2e65977a0c3246c2/RestSharp/Http.cs # L390) – drzaus

Cuestiones relacionadas