Поиск:

Ответ в темуСоздание новой темы Создание опроса
> алгоритм работы профайлера на PHP, помогите создать 
:(
    Опции темы
skyboy
Дата 20.6.2006, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: нет
Всего: 260



задался целью написать профайлер для собственных нужд. На PHP. В "Алгоритмы" разместил тему, потому как имею вопросы общего характера. Итак, профайлер. По моей задумке, счётчики должны составлять древовидную структуру. Т.е. если у меня код:
Код

.......
function function1(...
{
$profiler= profiler::get_instance();
$profiler->startSubTimer('function1','subfunction1');
....
}
......
$profiler->startTimer('function1');
function1($a,$b);
$profiler->stopTimer('function1');

Сначала создаётся/обрабатывается счётчик с именем function1 для обработки времени работы вызова функции function1. А потом внутри  вызванной функции запускается ещё один счётчик. Мне охота, чтоб счётчики и хранились в виде дерева(вложенные массивы разной размерности). А вот теперь вопрос. Насколько такой подход рационален? Хотелось бы, естественно, свести к минимуму влияние вызовов функций профайлера на время работы программы. Или хотя бы учитывать "утерянное" время, но относящееся к тестируемой программе. Вижу два варианта решения:
1. Храним список "утерянного времени": при обращении к функции запуска нового счётчика засекается время начала работы этой функции и время выхода. А потом, при подсчёте статистики, эти промежутки учитываются и вычитаются из значений счётчиков. Недостаток налицо: дважды нагружаем своим классом процессор. И время выполнения скрипта вполне может выйти за интервал ограничения работы. Конечно, если я сам на своей машине тестирую, то я могу изменить время выполнения скрипта. Но если я захочу протестировать "вживую"?
2. Хранить список команд-обращений к профайлеру "как есть" - то есть в массиве в виде элементов ("тип команды", "время обращения") - вести что-то вроде лога запросов("запустить таймер "ВасяПупкин" ; 12:03:05" // "запустить подтаймер в "ВасяПупкин" с именем "ТожеВася"; 12:03:07" // "остановить таймер..."), а считать статистику непосредственно перед выводом, считая, что на запись этого "лога" времени не уходило вовсе. Тут недостаток - большой расход памяти. Особенно, если я управляю счётчиками в цикле. Да и опять же - обработка лога на основе ветвлений по типу команды может настолько нагрузить вычислениями сервер, что я не уложусь в 30/45/60 секундный интервал. 
Может, у кого есть лучшее решение(учитывая тупость/прямолинейность моих вариантов, лучшее решение просто обязано быть!) smile 
Спасибо за то, что дочитали до этого места и за конструктивную и даже Неконструктивную критику smile

Добавлено @ 19:50 
Цитата

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.

Я это видел.  smile Потому про PHP можно было не говорить - интересуют решения в общем виде. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0430 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.