Реферат: Профилировщик Quantify
Calls. Число вызовов. Величина абсолютная.
Function Time. Общее время исполнения всех вызовов данной функции
Max F Time. Максимальное время функции
Module. Полный путь до модуля с функцией (бинарного)
Min F Time. Минимальное время работы функции
Source File. Полный путь до исходных текстов модуля.
По любому из предложенных полей можно провести сортировку в прямом и обратном порядке, а также наложить фильтр на определенные модули, например, для проверки только внутренних модулей или только внешних.
Выделить из списка узкую функцию трудно, поскольку для правильного расчета нужно принимать во внимание и время работы функции и число вызовов. Причем, число вызовов не всегда может быть показателем медлительности функции (вызывается часто, а работает быстро).
Трудно давать какие либо советы по оптимизации кода, тем более, что в этой редакции мы не ставили перед собой подобных целей. По теории оптимизации написаны громадные труды, к которым мы с радостью и отправляем читателей.
Можно, конечно, дать общие рекомендации по улучшению производительности кода и его эффективности:
Использовать конструкцию «I++» вместо «I=I+1», так как компиляторы транслируют первую конструкцию в более эффективный код. К сожалению, этот эффективность примера ограничена настройками используемого компилятора, и иногда бывает равнозначной по быстродействию;
Использовать прием развертывания циклов. Такой же старый прием оптимизации работы относительно простых циклов. Эффект заключается в сокращении числа проверок условия счетчика, так при проверке выполняются очень медленные функции микропроцессора (функции перехода). То есть вместо кода:
For(i=0;i<100;i++)sr=sr+1;
Лучше писать:
For(i=0;i<100;i+=2)
{
sr++;
sr++;
}
Использовать тактику отказа от использования вычисляющих конструкций внутри простых циклов. То есть, если иметь подобный фрагмент кода:
for (sr = 0; sr < 1000; sr++)
{
a[sr] = x * y;
}
то его лучше преобразовать в такой:
mn= x * y;
for (sr = 0; sr < 1000; sr++)
{
a[sr] = mn;