[英]c# Post http request slow
我忙於必須將數據上傳到站點的ac#應用程序。 我使用http post上傳數據,但是對於我們的應用程序來說太慢了。 上傳少量數據大約需要1.5秒。 我嘗試了兩種不同的方法。
方法1,使用WebRequest:
WebRequest request = WebRequest.Create(packet.url.ToString());
request.Method = "POST";
request.Proxy = null;
byte[] byteArray = Encoding.UTF8.GetBytes(packet.postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
WebResponse response = request.GetResponse();
dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();
使用WebClient的Approach2:
string responseFromServer;
using (WebClient wc = new WebClient())
{
wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
responseFromServer = wc.UploadString(packet.url, packet.postData);
}
兩者的延遲完全相同。 我在javascript中測試了同樣的東西。 我使用xmlhttprequest將相同的數據發布到服務器,並且上傳數據的時間少於0.5s。 請讓我知道c#中是否有更快的方法。
嘗試建立第一個連接的嘗試有點慢,除了其余的其他連接,這似乎很正常。
第一次嘗試連接到主機時, HttpWebRequest
會做很多工作,它必須維護一個ConnectionPool
並處理許多其他事情。 HttpWebRequest
本身非常復雜。
如果僅第一個請求變慢,請不要擔心。
現在, xmlhttprequest
快速響應,因為瀏覽器傾向於在相當長的時間內共享支持它的任何主機的活動連接。 因此,響應速度更快!
您應該設置Proxy = null
,它將提高所有HTTP請求的整體速度。
您應該在一個請求中發送所有數據,因為AppDeveloper表示webrequest需要大量時間進行初始化。 我可以為您提供類似的服務:因為我認為您有一個-列表,並且對於每個postData,您都會提出一個新的Web請求。 因此,您應該將整個List解析為JSON,然后通過WebRequest將完整的List發布到服務器。 這將需要2秒鍾,但是您將在2秒鍾內發送整個數據。
舊線程,但這可能適合您ServicePointManager.UseNagleAlgorithm = false;
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.