Я пишу критически важное для производительности приложение .NET, которое интенсивно использует многопоточность.
При использовании профилировщика производительности Visual Studio основными функциями с эксклюзивными примерами являются:
WaitHandle.WaitAny ()
- 14,23%
@ JIT_MonReliableEnter @ 8
- 7,76%
Монитор. Введите
- 5,09%
В основном, мои 3 основные функции работают с примитивами многопоточности и, как мне кажется, в некоторой степени находятся вне моего контроля. По сравнению с ними мои процедуры работы / обработки довольно малы, и я пытаюсь повысить производительность. Я считаю, что задействованные алгоритмы довольно надежны, хотя я довольно часто их пересматриваю.
У меня следующие вопросы:
WaitAny
особенно плохим? Я часто использую его, чтобы проверить, доступны ли определенные объекты очереди для чтения / записи, а также одновременно проверяю флаг прерывания. Есть ли лучший способ сделать это?