множественный вызов асинхронного метода, требующий времени для выполнения - PullRequest
0 голосов
/ 27 августа 2011

Я проверяю, чтобы улучшить производительность моего приложения.Существует метод, при котором девять методов вызываются один за другим для связи со службой, которая извлекает данные из разных таблиц.Все эти девять вызовов являются асинхронными.Поэтому он не должен занимать много времени у основного потока, но выполнение занимает более 3 секунд, что составляет большую часть времени, затрачиваемого на загрузку моей формы.Как я могу уменьшить это время.

Обновление:

Я использую шаблон MVP.В этом случае я вызываю методы презентатора один за другим, презентатор связывается со службой WPF через прокси-сервер, а мой прокси-сервер имеет подпись для методов Sync и Async, которые вызываются с использованием независимых методов презентатора.В этом случае все девять методов являются асинхронными, но для этого метода требуется слишком много времени, 2 секунды не слишком много, но это основная часть общего времени, затрачиваемого на загрузку страницы.

Ответы [ 3 ]

3 голосов
/ 27 августа 2011

Если все девять методов отправляют HTTP-запросы к одному и тому же хосту, вы можете столкнуться с проблемами, потому что только два HTTP-запроса к одному и тому же хосту разрешены одновременно по умолчанию. Один из вариантов - повысить этот лимит (вы можете сделать это в app.config), а другой - изменить протокол (если вы можете) для передачи всех операций в одном запросе и позволить серверу решить, как выполнять операции одновременно. Это упростило бы работу на стороне клиента, для начала.

1 голос
/ 27 августа 2011

Даже если запросы выполняются асинхронно, вам все равно придется ждать установления соединения.

Какими бы ни были причины, вы должны иметь возможность отправить метод, запускающий эти запросы, в пул потоков или в задачу TPL. Это должно решить вашу задержку загрузки формы.

0 голосов
/ 27 августа 2011

3 секунды не слишком много времени, в любом случае, если запуск асинхронных методов приводит к замедлению формы при загрузке, тогда я предлагаю вам выполнить этот код в загрузке формы или в конструкторе в другом потоке или таймере, который вы запускаетепосле завершения загрузки формы, поэтому выполнение ваших операций не повлияет на время загрузки формы.

...