c#发布http请求缓慢

时间:2013-02-14 04:50:12

标签: c#

我忙于一个必须将数据上传到网站的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#中有更快的方法,请告诉我。

4 个答案:

答案 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;