したがって、約60のデータ項目のAPIを呼び出すループがあります。ループの最初の実装では、WebClient.DownloadString()を使用して結果を取得しました。 なぜWebClient.DownloadStringTaskAsync()はWebClient.DownloadString()より高速ですか
は、私はこれが実際にUIが応答作った// Before
string data = webClient.DownloadString(url);
// After
string data = await webClient.DownloadStringTaskAsync(url);
WebClient.DownloadStringTaskAsync()を使用するようにコードを変換し、ダウンロード時のUIが応答ようにするには、それはまた、ダウンは約15秒からの実行時間を削減しました〜約1.6秒(10倍速度!)
私の質問は次のとおりです。なぜですか?コードはまだ順番に実行されており、ダウンロードが完了するまで待ってから次のブロックを開始できます(ブロッキングなしでも)ので、どのように高速に実行できますか?何かがあれば、タスクのオーバーヘッドが少し遅くなることが予想されます。
実行全体が別のスレッドにあります。 –
そうではありません。どのようにパフォーマンスを測定しましたか?有効な唯一の方法は、 'DownloadXXX'を呼び出す前にストップウォッチを開始し、直後にチェックすることです。ほとんどの場合、残りのコードの変更を測定している可能性があります。 –
実際に記述した内容を再現できるコードを投稿してください –