2012-01-24 12 views
7

Używam RestSharp w projekcie Mono do przesyłania niektórych plików i zauważyłem, że kiedy duży plik jest ładowany, pamięć znacznie rośnie.RestSharp ładuje cały plik do pamięci podczas przesyłania. Jak tego uniknąć?

Patrząc na RestSharp source code Zauważyłem, że FileParameter oczekuje tablicy bajtów, co oznacza, że ​​naprawdę ładuje plik do pamięci.

Czy robię coś nie tak? Czy istnieje sposób, aby RestSharp tego nie zrobił? Mogę przesyłać naprawdę duże pliki, więc przesyłanie ich z pamięci nie jest opcją.

Każda pomoc (w tym informacja o używaniu innej biblioteki HTTP dostępnej w mono) jest mile widziane.

+0

Ktoś napisał sposób na przesyłanie plików. Postaram się go wyśledzić, aby odpowiedzieć na pytanie. –

Odpowiedz

4

I zrezygnował po znalazłem this line, więc organy życzenie zawsze ładowany do pamięci, który jest nieszczęśliwy, więc zbudowali proste rozwiązanie zrobić przesyłanie plików na podstawie kodu z this question oraz debugowanie Apache HttpClient library.

Jeśli ktoś jest zainteresowany, jego źródło jest dostępne pod numerem here.

+0

Myślę, że kod został przesunięty. Czy mógłbyś zaktualizować link, aby wskazać konkretny commit + line no? –

+0

Począwszy od 2015 roku wygląda na to, że to [poprawnie przesyłające treści] (https://github.com/restsharp/RestSharp/blob/62335a677c92ad45d9dc3214ff6765b597d8642f/RestSharp/Http.Sync.cs#L226), w szczególności w [WriteMultipartFormData'] (https://github.com/restsharp/RestSharp/blob/bf9b79614d7fc3468d2a830e2e65977a0c3246c2/RestSharp/Http.cs#L390) – drzaus

4

Użyj przeciążenia AddFile(name, writer, filename).

Dla parametru writer należy podać wartość Action<Stream>, która jest zapisywana bezpośrednio w strumieniu treści żądania. Nie zamykaj strumienia.

Here's an example for writing to the stream.

+4

Nie ma wyjścia, ciało jest zawsze ładowane do pamięci -> https://github.com/restsharp/RestSharp/blob/master/RestSharp/RestClient.cs#L433 –

+0

Od 2015 roku wygląda na to, że [właściwie streaming ciała] (https://github.com/restsharp/RestSharp/blob/62335a677c92ad45d9dc3214ff6765b597d8642f/RestSharp/Http.Sync.cs#L226), w szczególności w ['WriteMultipartFormData'] (https://github.com/restsharp/ RestSharp/blob/bf9b79614d7fc3468d2a830e2e65977a0c3246c2/RestSharp/Http.cs # L390) – drzaus