У меня есть клиент Windows-консоли, который спит в течение нескольких минут и при пробуждении запрашивает новые обновления из Rest API. Запрос генерирует ответ с данными json, включающий список объектов, каждый объект состоит из идентификатора, описания, снимка экрана, отправленного из API клиенту в качестве URL-адреса. консольное приложение требуется для использования ответа json, и для каждого объекта он просматривает URL-адрес и пытается загрузить соответствующее изображение, связанное с каждым объектом в списке. Код выражается следующим образом:Как добиться загрузки файла Async с помощью TPL в C#
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 объектов JSON, что означает 500 фото скачать ... снова означает создание 500 web-клиентов. Я чувствую, что это не очень хорошая идея.
Мой вопрос: могу ли я повысить производительность, если я полагаюсь на TPL? как это сделать?
Ваш вопрос противоречит самому себе. Вы хотите больше * производительности * или хотите меньше использования ресурсов *? – 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