OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Среда, 23 Октябрь, 2019 14:13

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Профайлер
СообщениеДобавлено: Пятница, 03 Июнь, 2011 12:08 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
В силу некоторых причин профайлером (не в BlackBox) пользуюсь очень часто, т.к. приходится отлаживать тонны чужого кода.
В BlackBox все мои попытки получить от профайлера полезную информацию оканчиваются словами бл#$ #@$@$# и сочетанием клавиш ALT+F4... :D Может я чего-то не понимаю???

Вопрос:
Возможно ли в BlackBox сделать так, чтобы профайлер показывал время по человечески?
Например:
Есть процедуры А() Б() В()
причем
Код:
procedure А()
begin
   Б()
   В()
end A()


Профайлер мне показывает:
Б 70%
... 30%

Вот что мне это дает???? Ну 70 и что дальше? Б() может вызываться из 40 (к примеру) точек. Так какой толк от этой "информации"?

А я хочу (и я так привык):
А 90%
__Б 70%
__В 20%
... 10%
Т.е. Time(A) = Time(Б) + Time(В)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Профайлер
СообщениеДобавлено: Пятница, 03 Июнь, 2011 13:00 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Я на работе свой профилировщик написал. Под виндой время вычисляю с помощью QueryPerformanceCounter из kernel32.dll. Точность зависит от чипсета и составляет порядка микросекунды. Есть машины где квант чипсетного хронометра составляет 200 наносекунд, но встречаются и старые машины с квантом в 1200 нс.

Код:
      private static class WindowsPerformanceCounter
      {
         [System.Runtime.InteropServices.DllImport("kernel32.dll")]
         private static extern int QueryPerformanceFrequency (out long frequency);

         [System.Runtime.InteropServices.DllImport("kernel32.dll")]
         private static extern int QueryPerformanceCounter (out long counter);

         private static readonly double scale, offset;

         static WindowsPerformanceCounter ()
         {
            long frequency;
            QueryPerformanceFrequency(out frequency);
            if (frequency > 0)
            {
               scale = 1.0 / frequency;
               long count;
               QueryPerformanceCounter(out count);
               offset = scale * count;
            }
         }

         // Время в секундах прошедшее после инициализации.
         public static double GetSeconds ()
         {
            long count;
            QueryPerformanceCounter(out count);
            return scale * count - offset;
         }
      }

Просто тупо засекаю время на входе в профилируемую процедуру и на выходе.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Профайлер
СообщениеДобавлено: Пятница, 03 Июнь, 2011 13:40 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4523
Откуда: Россия, Орёл
ilovb писал(а):
В BlackBox все мои попытки получить от профайлера полезную информацию оканчиваются словами бл#$ #@$@$# и сочетанием клавиш ALT+F4... :D Может я чего-то не понимаю???
Недавно пользовался. Прочитал документацию; показывает ровно то, что прописано. Совершенно не понимаю, как можно пытаться получить какую-то ещё "полезную информацию", на которую компонент не рассчитан...

ilovb писал(а):
А я хочу (и я так привык):
А 90%
__Б 70%
__В 20%
... 10%
Т.е. Time(A) = Time(Б) + Time(В)
Возможно, такую картину можно получить, если в процедуре DevProfiler.Count ракручивать стэк вверх, чтобы отслеживать и учитывать цепочку вызовов. Вопрос, приемлем ли такой подход по быстродействию...

Вариант --- вызывать процедуры, замеряющие время и ведущие учёт, в начале и конце каждой нужной процедуры. Сделать вроде не сложно, но вызовы нужно будет вписывать/убирать вручную...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Профайлер
СообщениеДобавлено: Пятница, 03 Июнь, 2011 16:56 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Евгений Темиргалеев писал(а):
...на которую компонент не рассчитан...

Дык в том у меня и вопрос... На что он расчитан то, если не показывает информацию, которую должен показывать профилировщик по определению?
Профилировщик должен показывать характеристики программы в целом, а не время выполнения процедур отдельно от иерархии вызовов.
Толку от такого профилирования как от тайм екзекьюта каждой функции по отдельности. Т.е. по сути это пакетный тайм екзекьютер а не профилировщик :D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Профайлер
СообщениеДобавлено: Пятница, 03 Июнь, 2011 17:03 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Во! Вроде сформулировал:
Профилировщик предназначен для поиска узких мест. Т.е. для оптимизации. Так?
Но информация которую дает профайлер BlackBox об узких местах нам ничего не говорит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Профайлер
СообщениеДобавлено: Пятница, 03 Июнь, 2011 21:33 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4523
Откуда: Россия, Орёл
DevProfiler docu писал(а):
DevProfiler is a statistical profiler for Component Pascal programs. A profiler measures how much processing time is spent in the individual procedures of a program. A statistical profiler determines at regular time intervals (interrupt-driven) in which procedure of which module the program currently executes. These measurements are stored, and can later be used to display the profile.
Показывает на какие процедуры приходится основное время выполнения. Т.е., как я понимаю, именно эти процедуры нужно оптимизировать в первую очередь.

см. Statistical profiler


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Профайлер
СообщениеДобавлено: Понедельник, 06 Июнь, 2011 10:13 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Евгений Темиргалеев писал(а):
... именно эти процедуры нужно оптимизировать в первую очередь.


А если с ними все в порядке, и узким местом является одна из процедур выше в иерархии вызовов?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Профайлер
СообщениеДобавлено: Понедельник, 06 Июнь, 2011 15:37 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4523
Откуда: Россия, Орёл
ilovb писал(а):
Евгений Темиргалеев писал(а):
... именно эти процедуры нужно оптимизировать в первую очередь.
А если с ними все в порядке, и узким местом является одна из процедур выше в иерархии вызовов?
Тогда я недопонимаю чего Вы хотите и что для этого делаете. Может Вам стоит применить другой метод профилирования (не статистический) или по-другому настраивать DevProfiler (списко модулей/момент включения-выключения).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Профайлер
СообщениеДобавлено: Понедельник, 06 Июнь, 2011 15:55 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Вот здесь описаны настоящие профилировщики (с картинками...):

Профилирование программ
http://ccfit.nsu.ru/arom/data/PP_ICaG/06_Profiling_txt.pdf
Цитата:
На результате профилирования видно, что
функция calculate() вызывается из функции
main()
и занимает «все время» выполнения
программ


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Профайлер
СообщениеДобавлено: Понедельник, 06 Июнь, 2011 16:18 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Вот в вижуал студии
http://msdn.microsoft.com/ru-ru/library/ms182372.aspx


Вложения:
VS.png
VS.png [ 22.06 КБ | Просмотров: 7580 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Профайлер
СообщениеДобавлено: Понедельник, 06 Июнь, 2011 16:23 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Вот в 1С 8.2

Дерева вызовов нет, но есть номера строк кода, что по сути дает ту же информацию.
Обратите внимание на процедуру В(), она в списке встречается дважды...


Вложения:
Профайлер 1С.png
Профайлер 1С.png [ 83.28 КБ | Просмотров: 7580 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Профайлер
СообщениеДобавлено: Пятница, 10 Июнь, 2011 13:41 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
А кто-нибудь юзал Мокрософт Дебагер (ц) в BalckBox? Там дэлэлэли вроде как редистрибьютэбл. Он конечно на СИпласплас ориентирован, но некоторые вещи думаю можно заюзать :D


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB