2016-11-22 82 views
2

我使用「HttpClient」.Net組件獲取這個奇怪的行爲。爲什麼.Net HttpClient發佈請求很慢(當提琴手未運行時)?

我正在上傳一個文件(1.1MB)的發佈請求。當提琴手關閉時,提琴手開啓需要約15秒,這需要大約4秒。

我沒有使用任何代理,使用TLS1上傳到HTTPS服務器。 我只發送一個請求,不知道這些保活改變什麼... 我想也做了一些「Telerik的」這裏提到的事情: http://www.telerik.com/blogs/help!-running-fiddler-fixes-my-app-

但它並沒有工作,

我錯過了另一個設置嗎?緩衝區大小?不知道如何設置..

這是我上傳的文件:而不是「StreamContent」

  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); 
+0

與'HttpClient'無關,或者連接速度慢,或者網絡設置混亂。 –

+0

嗯,我的連接很好,使用同一臺電腦一樣的應用程序與小提琴手運行我得到它上傳約350℅更快 - 持續。 –

+0

上傳大文件更糟糕。對於10MB的文件,我可以在25秒內開啓fiddler的時候上傳文件,當fiddler關閉的時候大約3分鐘。 –

回答

0

通過使用「ByteArrayContent」解決。

在 「MultiPartFromData」 類

這種類型HttpContent的是約5X-8X更快的 「添加」 方法。

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