0

我正忙于必须将数据上传到站点的 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();

方法2,使用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

4 回答 4

0

You should set Proxy = null, it increases the overall speed of all HTTP requests.

于 2013-02-14T05:19:34.077 回答
0

您应该在一个请求中发送所有数据量,因为 AppDeveloper 说 webrequest 需要很长时间来初始化。我可以让你做这样的事情:因为我认为你有一个 - 列表,并且对于每个单独的 postData 你提出一个新的网络请求。因此,您应该将整个 List 解析为 JSON,然后通过 WebRequest 将完整的 List 发布到服务器。这将需要 2 秒,但您将在 2 秒内发送整个数据。

于 2013-02-14T06:54:28.233 回答
0

旧线程,但这可能适合你 - ServicePointManager.UseNagleAlgorithm = false;

于 2013-09-24T12:05:23.403 回答
0

尝试第一次连接有点慢,除此之外其他连接似乎正常。

在第一次尝试连接到主机时,HttpWebRequest做了很多工作,它必须维护ConnectionPool和处理许多其他事情。HttpWebRequest本身就很复杂。

如果只有第一个请求变慢,请不要担心。

现在,xmlhttprequest响应迅速,因为浏览器倾向于在相当长的时间内为任何支持它的主机保持连接。因此反应更快!

于 2013-02-14T05:08:11.193 回答