OberonCore
https://forum.oberoncore.ru/

Профайлер
https://forum.oberoncore.ru/viewtopic.php?f=1&t=3467
Страница 1 из 1

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

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

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


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

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

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

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

Я на работе свой профилировщик написал. Под виндой время вычисляю с помощью 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;
         }
      }

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

Автор:  Евгений Темиргалеев [ Пятница, 03 Июнь, 2011 13:40 ]
Заголовок сообщения:  Re: Профайлер

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

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

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

Автор:  ilovb [ Пятница, 03 Июнь, 2011 16:56 ]
Заголовок сообщения:  Re: Профайлер

Евгений Темиргалеев писал(а):
...на которую компонент не рассчитан...

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

Автор:  ilovb [ Пятница, 03 Июнь, 2011 17:03 ]
Заголовок сообщения:  Re: Профайлер

Во! Вроде сформулировал:
Профилировщик предназначен для поиска узких мест. Т.е. для оптимизации. Так?
Но информация которую дает профайлер BlackBox об узких местах нам ничего не говорит.

Автор:  Евгений Темиргалеев [ Пятница, 03 Июнь, 2011 21:33 ]
Заголовок сообщения:  Re: Профайлер

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

Автор:  ilovb [ Понедельник, 06 Июнь, 2011 10:13 ]
Заголовок сообщения:  Re: Профайлер

Евгений Темиргалеев писал(а):
... именно эти процедуры нужно оптимизировать в первую очередь.


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

Автор:  Евгений Темиргалеев [ Понедельник, 06 Июнь, 2011 15:37 ]
Заголовок сообщения:  Re: Профайлер

ilovb писал(а):
Евгений Темиргалеев писал(а):
... именно эти процедуры нужно оптимизировать в первую очередь.
А если с ними все в порядке, и узким местом является одна из процедур выше в иерархии вызовов?
Тогда я недопонимаю чего Вы хотите и что для этого делаете. Может Вам стоит применить другой метод профилирования (не статистический) или по-другому настраивать DevProfiler (списко модулей/момент включения-выключения).

Автор:  ilovb [ Понедельник, 06 Июнь, 2011 15:55 ]
Заголовок сообщения:  Re: Профайлер

Вот здесь описаны настоящие профилировщики (с картинками...):

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

Автор:  ilovb [ Понедельник, 06 Июнь, 2011 16:18 ]
Заголовок сообщения:  Re: Профайлер

Вот в вижуал студии
http://msdn.microsoft.com/ru-ru/library/ms182372.aspx

Вложения:
VS.png
VS.png [ 22.06 КБ | Просмотров: 10651 ]

Автор:  ilovb [ Понедельник, 06 Июнь, 2011 16:23 ]
Заголовок сообщения:  Re: Профайлер

Вот в 1С 8.2

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

Вложения:
Профайлер 1С.png
Профайлер 1С.png [ 83.28 КБ | Просмотров: 10651 ]

Автор:  ilovb [ Пятница, 10 Июнь, 2011 13:41 ]
Заголовок сообщения:  Re: Профайлер

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

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/