0

サイトにデータをアップロードする必要がある ac# アプリケーションで忙しくしています。http ポストを使用してデータをアップロードしますが、アプリケーションには遅すぎます。少量のデータをアップロードするのに約 1.5 秒かかります。私は2つの異なるアプローチを試みました。

アプローチ 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

を設定する必要がありProxy = nullます。これにより、すべての HTTP 要求の全体的な速度が向上します。

于 2013-02-14T05:19:34.077 に答える
0

最初の接続の試みは少し遅く、残りの他の接続は正常に見えます。

ホストに最初に接続しようとするとHttpWebRequest、多くの作業が行われ、他の多くのことを維持ConnectionPoolおよび処理する必要があります。HttpWebRequestそれ自体は非常に複雑です。

最初のリクエストだけが遅くなっても心配はいりません。

現在、xmlhttprequestブラウザは、それをサポートするホストに対してかなりの時間をかけて接続を維持する傾向があるため、迅速に応答します。だからレスポンスも早い!

于 2013-02-14T05:08:11.193 に答える
0

AppDeveloper によると、webrequest は初期化に時間がかかるとのことです。私はあなたにそのようなことをするように提案できます: 私が思うに、あなたは - List を持っていて、単一の postData ごとに新しい Web リクエストを作成します。したがって、リスト全体を JSON に解析してから、完全なリストを WebRequest 経由でサーバーに送信する必要があります。2 秒かかりますが、その 2 秒でデータ全体を送信します。

于 2013-02-14T06:54:28.233 に答える