@mletov

Как правильно использовать многопоточность в однотипных циклических операциях?

Предположим, мне надо выполнить некоторую операцию в цикле.
Каждая итерация цикла достаточно прожорлива (жручие sql запросы и т д).
Естественно, хочется оптимизировать процесс, смотрю на многопоточность.

Но т к операция в цикле и вызываются одни те же методы, от и тот же контекст к БД и т д, то, получается, надо использовать lock как здесь в примере https://metanit.com/sharp/tutorial/11.4.php. Но в этом случае остальные процессы будут ждать, пока не освободится ресурс, т е выигрыша в производительности не выйдет. Как вообще добиваются повышения производительности в таких случаях?

Вот реальный пример:
Мне надо сформировать отчет в Excel за 2 года. Один лист - 1 месяц. Формирую через NPOI.
Для генерации каждого листа выполняется достаточно объемный sql запрос. Очень хочется оптимизировать процесс.
  • Вопрос задан
  • 366 просмотров
Пригласить эксперта
Ответы на вопрос 2
DarkRaven
@DarkRaven
разработка программного обеспечения
А почему вы не можете перейти на 1 запрос? Реально, так было бы проще.
Касаемо же многопоточности, то тут важно, чтобы провайдер поддерживал пул соединений (и использовал их, в вашем случае) и создавалось новое соединение для каждого потока.

Но, большого ускорения не будет, вы тут упретесь в размер пула соединений. Еще момент, сколько активных соединений поддерживает ваша БД.

Вариант с многопоточным формированием отчета - это очень дорогой, как для БД, ресурсов , так и для железа и, повторюсь - будет куда лучше это делать через один запрос.
Ответ написан
@petelinmn
Программист
Если слабое место запросы, то думается именно их и нужно оптимизировать.
Если в многопоточном режиме загрузить БД будет ли намного быстрее работать это вопрос.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы