Потоки имеют тенденцию сбивать с толку большинство профилировщиков тем, что они не уверены, как подсчитать время, когда один поток заблокирован в ожидании другого, и время, в течение которого поток ожидает работу (если вы не используете пул потоков).
В нашем опыте вы должны проверить два профилировщика:
1. Eqatech имеет бесплатный профилировщик, который выполняет внедрение кода для профилирования. Это работает только до уровня метода, но работает на 64-битной и может дать вам представление о том, куда уходит ваше время.
2. Профилировщик ANT Red-Gate - это лучшее, что мы использовали для детализации временных параметров на уровне линии, что очень важно, если у вас есть сценарий, когда потоки блокируются, ожидая друг друга значительную часть своего времени выполнения.
Тем не менее, если вы можете запускать свои тесты без пользовательского интерфейса, я настоятельно рекомендую настроить некоторые тесты производительности NUnit, чтобы вы могли быстро и легко повторять их в точности одинаково каждый раз. Делая это, вы можете видеть, куда уходит ваше время, даже с помощью профилировщика уровня метода, предлагать и проверять отдельные оптимизации и т. Д. Вы будете удивлены тем, как отнятие времени из одного места просто добавляет его в другое, потому что потоки в конечном итоге ожидают друг друга поэтому очень хорошо повторяемое испытание очень полезно.
Профилировщик Eqatech изменяет ваш скомпилированный IL, поэтому всякий раз, когда вы повторно запускаете этот IL, вы получаете новый файл трассировки производительности, поэтому он должен соответствовать вашему сценарию командной строки. Я считаю, что ANT может работать аналогично.
Наконец, если ваше приложение будет использоваться в нескольких средах, я бы определенно рекомендовал запустить несколько тестов производительности на одном процессоре или только с гиперпоточным процессором. Если вы будете очень агрессивно настроены на настройку многоядерных процессоров, вы можете добавить достаточные накладные расходы, которые могут привести к взаимоблокировке или просто замедлить работу небольшого числа процессоров.