私はWindowsコンソールクライアントを数分間スリープ状態にし、スリープ状態になると、Rest APIから新しい更新を要求します。リクエストはJSONデータで応答を生成します。オブジェクトのリストが含まれ、各オブジェクトはAPIからクライアントにURLとして送信されるID、description、screenshotで構成されます。コンソールアプリケーションはjsonレスポンスを消費する必要があり、オブジェクトごとにURLをルックアップし、リスト内の各オブジェクトに関連付けられた対応するイメージをダウンロードしようとします。コードが発現されるC#でTPLを使って非同期ファイルをダウンロードする方法
foreach (var jobject in response)
{
Console.WriteLine(jobject.id);
Console.WriteLine(jobject.description);
if (jobject.shotUrl != null)
{
WebClient webclient = new WebClient();
webclient.DownloadFileAsync(new System.Uri(jobject.shotUrl), "F:\\" + jobject.id + ".jpg");
}
}
を次のように時々500写真のダウンロードを意味し、約500のJSONオブジェクトが存在することができます...再び500 webclientsを作成することを意味します。私はこれが良い考えではないと感じます。
私の質問は、私がTPLに頼っているとパフォーマンスを上げることができますか?どうすればいい?
System.Net.Http.HttpClient _client = new System.Net.Http.HttpClient();
をそして、あなたは、ファイルをダウンロードし、そのようなディスクに保存します方法書くことができます:HttpClientをを使用して
あなた自身の意見は矛盾しています。あなたはより多くのパフォーマンス*を望んでいるのですか? – zaitsman
エンドポイントごとにデフォルトの接続制限がありますが、コンソールアプリケーションでは2 IIRCです。つまり、2つ以上同時にダウンロードすることはできません。以下を参照してください:https://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit(v=vs.110).aspx – rene
この質問の@reneには、同時接続を増やす方法が示されていますhttp://stackoverflow.com/questions/26206412/asynchronous-downloading-files-in-c-sharp – Alrehamy