Лучший способ измерить скорость функций, классов и процессов - PullRequest
3 голосов
/ 03 февраля 2011

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

Также, как вы измеряете скорость SQL, например, различия между хранимыми процедурами, выборами, представлениями и т. Д .?

Ответы [ 3 ]

4 голосов
/ 03 февраля 2011

У вас есть два варианта.

Используйте System.Diagnostics.Stopwatch для определенных методов.

Это таймер высокого разрешения в .NET, который вы можете использовать для определенных частей вашего кода.

Используйте профилировщик, если вам нужно измерить производительность всего приложения.

Вы можете использовать встроенный профилировщик выпуска Ultra Studio Visual Studio или такой инструмент, как EQATEC .

1 голос
/ 03 февраля 2011

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

Кроме того, хороший профилировщик часто может дать вам и другие полезные метрики, например, сколько памяти использует ваш код во время выполнения.

0 голосов
/ 04 февраля 2011

Лучше не путать цели измерения и оптимизации.Это разные задачи.Измерение, хотя и полезно для количественной оценки результатов исправления чего-либо, плохо говорит вам, что нужно исправить.

Что касается измерения, то если я хочу сделать презентацию о том, как быстро что-то происходит, я хочу контролироватьсреда и хороший секундомер.Однако с целью оптимизации грубые измерения (например, выполнение чего-то 1000 раз) и использование простого таймера более чем достаточно.

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

Когда запускается какая-либо программа, она отслеживает дерево вызовов.Оптимизация состоит в удалении как можно большего количества листьев (инструкций) и как можно большего количества фруктов (ввода / вывода).Хороший способ сделать это - обрезать целые ветви.

  • Во всех программах, кроме самых маленьких, типичные возможности оптимизации состоят из точек вызова (строк кода, где вызываются функции, а не самих функций) что, когда кто-то понимает, сколько из них прорастает дерево вызовов, это действительно можно сделать другим способом.Одна невинно выглядящая строка кода может быть ответственна за большую часть всего дерева, и вы можете просто отрубить его.

Чтобы найти их, я думаю, что настенные часыстековая выборка - лучший способ.Это не обязательно для эффективного процесса, и довольно небольшое количество образцов работает так же хорошо (или лучше), чем большое количество образцов.Это необходимо делать повторно, потому что любая данная программа, как написано вначале, не содержит только одной возможности для ускорения.Содержит несколько. Вот пример.

...