2016-11-09 17 views
-1

したがって、約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倍速度!)

私の質問は次のとおりです。なぜですか?コードはまだ順番に実行されており、ダウンロードが完了するまで待ってから次のブロックを開始できます(ブロッキングなしでも)ので、どのように高速に実行できますか?何かがあれば、タスクのオーバーヘッドが少し遅くなることが予想されます。

+0

実行全体が別のスレッドにあります。 –

+1

そうではありません。どのようにパフォーマンスを測定しましたか?有効な唯一の方法は、 'DownloadXXX'を呼び出す前にストップウォッチを開始し、直後にチェックすることです。ほとんどの場合、残りのコードの変更を測定している可能性があります。 –

+0

実際に記述した内容を再現できるコードを投稿してください –

答えて

0

私はその理由を発見しました。開発者(私)はばかです。

ご迷惑をおかけして申し訳ございません。サンプルとしてポストする前と後のコードを取り除くのを開始したとき、テスト目的でそこにあったコードの前にThread.Sleep()が見つかりました。

Thread.Sleep()が削除されている時間は、両方とも同じボールパーク内にあります。それを使用する際

1あなたは、両方の実装でよく見る場合に便利コメント

+1

この回答は誰にも役立ちません。技術的に質問を削除する必要があります。 – DavidG

0

投稿をすべての人にそれは、スピードの違い特別なものではありませんが、ほぼ同じことを、それらの間の違いがあります。たとえば、非同期メソッドは、たとえばモバイルデバイスで使用する方が効率的です。詳細については、MSDNのasyncを参照してください。

関連する問題