[英]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.