НЕ ПРЯМОЙ ОТВЕТ (но потенциально необходимая информация поддержки следующим образом):
Некоторые из предоставленных ответов довольно хорошо, чтобы прямо ответить на ваш вопрос. Однако, чтобы выполнить то, что вы пытаетесь сделать, я хотел бы добавить пару заметок.
Во-первых, учтите временные издержки компилятора «точно в срок» (jit), который происходит во время выполнения. Любой код, где вы берете начальную отметку времени, затем делаете , а затем берете окончательную метку времени для вычитания t2-t1 для дельта для любой функции внутри вещей, если вы включаете любые функции, которые вы еще не вызывали во время текущий процесс, то при первом вызове вы заплатите за служебные данные jit, чтобы скомпилировать байт-код в собственный код. В этом случае стоимость не отражает фактическую стоимость критического кода производительности во время исполнения, которая, по-видимому, часто называется кодом, который часто называется, и все же стоимость jit оплачивается только один раз (при первом вызове этого процесса). Поэтому вызовите временный код несколько раз, выбросьте первое время и возьмите среднее.
Кроме того, остерегайтесь затрат времени на сборку мусора. Если вы просто играете, то может быть возможно и интересно провести сравнение кода, который строго избегает выделения новых объектов. Но иногда это непросто, особенно когда вы вызываете функции, реализации которых вы не можете изменить. Кроме того, я должен предоставить вам, что накладные расходы реального мира на производственный код не могут избежать накладных расходов на сборку мусора, поэтому получение реалистичной цифры должно включать в себя эти накладные расходы. Тем не менее, если ваш материал содержит код, который выделяет новые объекты, тогда он может начать сборщик мусора, который будет дорогостоящим, поэтому подготовьтесь к некоторым потенциальным выбросам, которые вы, возможно, захотите выбросить.
Во-вторых, хорошие ответы предоставили код для объявления внешних функций для вызова из системных dll, и это здорово. Правильное использование этих подписи в общем случае может быть неприятностью, поэтому я хотел бы упомянуть о большом ресурсе для этого: pinvoke.net. Поиск QueryPerformanceCounter дал мне подписи, которые вырезали и отклеили от уже предоставленного ответа, и это отличный ресурс для любых системных вызовов, которые вы хотите сделать.
http://pinvoke.net/search.aspx?search=QueryPerformanceCounter&namespace=[All]
Если вы измерения временных интервалов между частями кода, как это отличается от таймера? В любом случае вы можете использовать interop для вызова QueryPerformanceCounter Kernel32.dll самостоятельно. – Matthew
Не могли бы вы объяснить, почему вы хотите это сделать, «чтобы избежать использования геттеров для его свойств» не вызывает большой причины. Проблема с QueryPerformanceCounter заключается в том, что она возвращает значение в подсчетах, а количество отсчетов в секунду является переменной в зависимости от архитектуры и может быть найдено с помощью QueryPerformanceFrequency. С секундомером вы получаете значение, которое является фактической единицей времени. –
@BenRobinson - это имеет для меня большой смысл, иначе я не буду спрашивать. –