Search code examples
c#.nethttphttpclientfiddler

Why .Net HttpClient post request is slow (when fiddler is not running)?


I'm getting this weird behavior using "HttpClient" .Net component.

I'm uploading a file (1.1MB) in a post request. When fiddler turn off it's takes about 15 sec when fiddler is on it's takes about 4 sec.

I'm not using any proxy, uploading to a HTTPS server using TLS1. I send only one request, not sure the keep-alive changing anything... I tried also to do some of the things "telerik" mentioned here: http://www.telerik.com/blogs/help!-running-fiddler-fixes-my-app-

But it didn't worked,

Is there another setting that I missed? Buffer size? not sure how to set it..

This is how I upload the file:

           HttpClient _httpClient;

            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
            ...
            ...
            ...

            MultipartFormDataContent multipartData = new MultipartFormDataContent();
            multipartData.Add(new StreamContent(File.OpenRead(scanPath)), "fileToUpload","\"" + Path.GetFileName(scanPath) + "\"");

            HttpResponseMessage response = await _httpClient.PostAsync("FileUpload", multipartData);

            MyObject result = await GetResultFromResponse<MyObject>(response);

Solution

  • Solved by using "ByteArrayContent", instead of the "StreamContent".

    In the "add" method of the "MultiPartFromData" class

    This type of HttpContent is about 5X-8X faster.

    multipartData.Add(new ByteArrayContent(File.ReadAllBytes(scanPath)), "fileToUpload", "\"" + Path.GetFileName(scanPath) + "\"");