8

DownloadFileAsyncサーバーからいくつかのファイルをダウンロードする方法を使用してWebClientいますが、VS2010 内でコードを非公式にテストしたところ、起動中に約 3 秒間ブロックされることに気付きました。そもそも目的を打ち負かします。

関連するコードのスニペットは次のとおりです。

WebClient downloader = new WebClient();
downloader.DownloadProgressChanged += new DownloadProgressChangedEventHandler(updateDownloadProgress);
downloader.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(downloadCompleted);

var current_map = map_downloads[0];//string with filename, map_downloads is List<string>

var path = System.IO.Path.GetTempFileName();

downloaded_maps.Add(path);//adding the temp file to a List<string>

downloader.DownloadFileAsync(new Uri(MAP_BASE + current_map), path); //MAP_BASE is a string containing the base url

DownloadFileAsyncアプリケーションが ~100 MB のファイルをダウンロードしている間、UI がブロックされないようにするために使用しています。明らかに、通話の開始中に UI が 3 秒間ブロックされると、完全ではないにしても、ユーティリティがいくらか低下します。

私は比較的 C#/.Net の経験がありません (3 ~ 4 年前、IIRC で .Net 2.0 をたくさんやりましたが、今は基本的に再学習しています)。

4

4 に答える 4

9

Nav の発言に加えて、問題はWeb プロキシの自動検出にあるようです。この回答を参照してください: Why is this WebRequest code slow?

私はそれをテストしましたが、最初の呼び出し中に大幅な遅延なしで動作するようになりました.

于 2010-09-26T18:47:25.217 に答える
8

DownloadFileAsync が実際にブロック スレッドで DNS 名をチェックすることをどこかで読んだため、速度が低下する可能性があります。IP を直接入力すると、ブロックされないはずです。ここでその情報を見つけました:http://www.csharp-examples.net/download-files/

于 2010-06-25T02:12:52.437 に答える
0

遅延がアプリにあるのか、ネットワークにあるのかを把握しましたか? 宛先サーバーが遅いかどうかを調べるには、Wireshark を実行し、要求が送信された後に最初の応答がいつ受信されるかを確認します。多分それは遅延が発生する場所ですか?

また、これが大きなアプリケーションの一部である場合、初回は起動コストのために常に遅くなります。本当に正確な測定値を取得したい場合は、1 回目の呼び出しと 2 回目から 10 回目の呼び出しに必要な合計時間を測定します。これから、遅延が起動コストにあるのか、それとも毎回発生するのかを知ることができます。

于 2010-06-17T01:12:46.830 に答える
-1

ASP.NETでは、スレッドの役割がaysncメソッドから期待される場合、非同期メソッドを使用しても意味がありません。
webclient asyncを起動すると、メインスレッドが終了したとき(aspxをレンダリングする前)に常に参加します。

トピックに関するすばらしい記事:http ://weblogs.asp.net/gunnarpeipman/archive/2010/09/07/making-asynchronous-calls-to-web-services-during-asp-net-page-processing.aspx

ここに画像の説明を入力してください

ここにそれに関する他の情報があります: ASP.NETMVCで呼び出されないWebClient非同期コールバック

于 2011-08-28T09:58:49.207 に答える