PDA

Просмотр полной версии : оценка производительности кода


genius
04.08.2005, 16:43
сейчас пишу приложение, визуал которого должен обновляться как можно чаще. поэтому в установках экспорта у меня 120 fps, а таймер вызывается через setInterval(timer, 1) (настолько часто, насколько возможно). естественно всё это серьёзно загружает процессор, который всегда работает на 100%.

посему возникает несколько вопросов:

1) как оценить, сколько процессорного времени сжирает отрисовка, а сколько выполнение кода?
2) как узнать, сколько времени тратится на каждую функцию?
3) как узнать структуру всего процессорного времени? (в идеале отчет вроде стандартного "report size")
4) если нет прямых ответов на эти вопросы, как вы решаете проблемы анализа производительности кода?
5) есть ли какие-то классы/наработки по этой теме?

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

спасибо.

KidsKilla
04.08.2005, 16:49
1) -
2) t = getTimer();
var i = 1000;
while(i--) func();
trace(getTimer()-t);
а что ещё?
3) -
4) есть статьи по оптимизации. кроме оптимизации кода почти никак. можно отдельные ф-ции проверять через 2) смотреть что быстрее.
5) статьи. ссылок не помню. попробую порыться. даже тут как-то была ссыль.

genius
04.08.2005, 16:52
2) на отдельную функцию - всё понятно. а если у меня 20-30 классов и у каждого по 3-10 методов? тут нужно в комплексе решать задачу.

KidsKilla
04.08.2005, 16:53
какую задачу?
сделай то же самое для каждого метода...

iNils
04.08.2005, 16:57
честно говоря, я с трудом понимаю зачем такой большой фпс. можно просветить?

genius
04.08.2005, 17:01
2 KidsKilla:
задача - комплексно (всё сразу вместе) оценить, что жрет процессорное время

2 iNils:
1) синхронизация бита в музыке с происходящим на экране
2) чем больше fps, тем чаще вызывается мой таймер через setInterval
3) чем чаще, тем точнее попадание визуала в звук

KidsKilla
04.08.2005, 17:04
2) бред
3) бред

iNils
04.08.2005, 17:07
По поводу звука (не совсем в тему, но может чем то пригодится). Была статья (http://flash-ripper.com/archives/2004_08.htm) на потрошителе про пульт.

iNils
04.08.2005, 17:10
По поводу fps и setInterval (http://www.flasher.ru/forum/showthread.php?t=65663&highlight=setInterval)

genius
04.08.2005, 17:34
2 iNils:
про пульт: спасибо, почитаю :)

2 all:
так что насчет оценки производительности?

Varan_LSD
04.08.2005, 17:47
Поищи в инете вот такую библиотеку - ASProf-1.0.mxp может поможет

Создает отчет по затрате времени на каждую опписанную функцию!

iNils
04.08.2005, 17:52
Самому интересно стало. Еще не тестил, но нашел здесь (http://www.nochump.com/asprof/downloads/ASProf-1.0.mxp).

genius
04.08.2005, 17:56
2 KidsKilla:

для вас, уважаемый коллега, следующий код:

class test.Test {
var intID;
var start;
var sum = 0;
var count = 0;
var tLast = 0;

function tick() {
var time = getTimer();
sum += time - tLast;
count++;
if (count >= 100) {
var av = sum/count;
TRACE(Flashout.DEBUG + "av=" + av);
clearInterval(intID);
}

tLast = time;
}

function Test() {
Flashout.init();
TRACE(Flashout.INFO + "Application started");

tLast = getTimer();
intID = setInterval(Delegate.create(this, tick), 1);
}

// --- Main Entry Point
static function main() {
var test:Test = new Test();
}
}

при fps=4 выдает av=25.48
при fps=120 выдает av=10.74

зависимость хоть и не прямая, но ощутимая

iNils
04.08.2005, 17:59
А на fps 30 или 60?
Если читал ссылку на топик, то там описывался забавный момент. Что при фпс в районе 13 setInterval вызывался реже чем при при 9

genius
04.08.2005, 18:02
при fps=30 av=10.22
при fps=60 av=10.24

похоже, при увеличении fps разница становится не настолько заметной

KidsKilla
04.08.2005, 18:04
1) слишком наворочено, для простейших операций.
2) setInterval не точен. очень не точен. пределы разные. часто +- 3-5%
3) 100 смени на 10 000 и
4) протесть неск-ко раз. скорее всего проц задумывался сперва.
не верю, что есть связь фпс и setInterval. 1) + 2) дают порой такие идиотские рез-ты.

пс, кстати, не забывай про неточности вычислений проца. фпс на это порой очень сильнок действие даёт. как итог для более точных вычислений рекомеддуются фпс 21 и 31

genius
04.08.2005, 18:11
1) поменял на менее навороченный код
2) но не 2,5 раза
3) сменил на 1000
4) тестил несколько раз

fps=4 av=24.999
fps=120 av=10.108

можешь проверить своими методами

genius
04.08.2005, 18:17
2 Varan LSD:
посмотрел. скачал. то, что нужно, спасибо :)

KidsKilla
04.08.2005, 18:19
фидимо сама цифра в 4 фпс ужасна. заметь, 30, 60, 120 нет разницы.
это к моему пс