Как замерить производительность кода прямо в коде?

Stopwatch не подойдет.

Нужно мерить именно процессорные такты (CPU-sampling или что-то вроде того). In code.

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


Но алгоритм будет работать около недели на рабочей машине, в фоне, в различных условиях. Процессор то свободен, то занят, с диском тоже самое, по этому замеры времени (via Stopwatch) в разных условиях будут просто несопоставимы.


Необходима какая-то метрика эффективного времени, потраченного приложением. Или что-нибудь типа CPU-sampling из VS Perfomance Profiler'а. Но только прямо в коде. Как Stopwatch.


Или так не бывает?
  • Вопрос задан
  • 3032 просмотра
Решения вопроса 1
LightSUN
@LightSUN
Похоже вот это подойдёт:

[DllImport("kernel32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool QueryProcessCycleTime(IntPtr ProcessHandle, out ulong CycleTime);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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