我忙于一个必须将数据上传到网站的c#应用程序。我使用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();
Approach2,使用WebClient:
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.5秒。如果在c#中有更快的方法,请告诉我。
答案 0 :(得分:0)
第一次连接的尝试有点慢,除此之外其他连接似乎正常。
首次尝试连接到主机时,HttpWebRequest
会做很多工作,它必须维护ConnectionPool
并处理许多其他事情。 HttpWebRequest
本身非常复杂。
如果只有第一个请求变慢,请不要担心。
现在,xmlhttprequest
快速响应,因为浏览器倾向于为任何支持它的主机保持连接活动一段时间。因此响应更快!
答案 1 :(得分:0)
您应该设置Proxy = null
,它会提高所有HTTP请求的整体速度。
答案 2 :(得分:0)
您应该在一个请求中发送所有数据量,因为AppDeveloper表示webrequest需要花费大量时间进行初始化。我可以提供你这样的事情: 我认为你有一个 - 列表和每个postData数据,你做一个新的Web请求。因此,您应该将整个List解析为JSON,然后通过WebRequest将完整的List发布到服务器。它需要2秒钟,但您将在2秒钟内发送完整数据。
答案 3 :(得分:0)
旧帖子但这可能适合你 - ServicePointManager.UseNagleAlgorithm = false;
。