Самый быстрый способ асинхронно выполнить метод?

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

в настоящее время я застреваю с

ThreadPool.UnsafeQueueUserWorkItem

как немного быстрее, чем регулярный QueueUserWorkItem. однако, я боюсь, что пул потоков может заблокировать это здесь. существует ли более быстрый способ диспетчеризировать вызов метода другого потока? я просто задаюсь вопросом, что лучшая практика для такой задачи? небезопасный код не был бы никакой проблемой как им, я нахожусь в сценарии, где уже много interop используется. спасибо j.

11
задан plinth 4 August 2010 в 14:41
поделиться

2 ответа

Одновременная вставка нескольких или более крупных элементов должна снизить накладные расходы.

Отредактировано после прочтения одного из ваших комментариев:

Я испытал похожие вещи. Мое обычное средство - не отправлять каждый асинхронный запрос немедленно, а скорее имитировать то, что алгоритм Нэгла делает для TCP.

Здесь, получив Request (), вы должны немедленно отправить его, только если асинхронная работа не выполняется. Если асинхронная работа ожидает выполнения, вы должны выполнить отправку только в том случае, если истекло определенное количество миллисекунд с момента самого раннего неотправленного запроса или накопилось определенное количество невыполненных запросов Request ().

Это эффективный шаблон для сокращения накладных расходов при получении частых запросов Request (), которые вы не можете контролировать. Надеюсь, это поможет.

1
ответ дан 3 December 2019 в 12:04
поделиться

Может быть, вы могли бы отбросить все свои запросы на отправку в List <> и разбудите другой фоновый поток для выполнения вызовов QueueUserWorkItem.

Правильно ли я понимаю проблему?

0
ответ дан 3 December 2019 в 12:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: