ФИНАНСЫ БЕЗ ПРОБЛЕМ(tm):
ПЕРЕГОВОРНЫЙ ПУНКТ II

Добро пожаловать, Гость. Пожалуйста, выберите:
Вход || Регистрация.
04.12.24 в 13:57:57


Наш сайт | Cтаpый форум (до 08.2003 года) | Интернет-магазин & Центр загрузок |
Главная | Помощь | Поиск | Участники | Вход | Регистрация
Модифицированный Клиент CLW32:
Из документации ...
На форуме...

Использование Клиента FCM:
1. Отчетный период и журнал операций.
2. Печать.
3. Экспорт.
4. Многострочная операция.
5. Редактирование многострочных операций.
http://www.fwp-client.com

Работа с ФБП через браузер:
Настройка для лечебных учреждений, оказывающих медицинские услуги:
На форуме...
http://vasoft.ru

Технический аудит настройки.
[Читать]

ФИНАНСЫ БЕЗ ПРОБЛЕМ (сетевая) и Opencart:
предлагаем:
1. Выгрузка новых покупателей из интернет-магазина в план счетов и сохранение информации в extrd.dat.
2. Выгрузка данных о заказанном товаре и сохранение в ФБП в журнале операций, номер заказа регистрируем в плане счетов как с.счет.
3. Українська локалізація.






   Финансы без пpоблем: Пеpеговоpный Пункт II
   Общий pаздел

   Таймер
« Предыдущая Тема | Следующая Тема »
Страниц: 1  Ответить | Уведомлять | Послать Тему | Печатать
   Автор  Тема: Таймер  (Прочитано 30571 раз)
Vladimir

****



Я люблю этот Форум!

   
Просмотреть Профиль | WWW |

Сообщений: 264
Таймер
« В: 28.12.16 в 20:14:20 »
Цитировать | Править

При отладке отчетных форм частo требуется измерить время, потребное на выполнение того или иного фрагмента кода или всей формы целиком.  
 
Имеющаяся встроенная функция [tm] мало для этого пригодна, так как выдает время с точностью до минуты.
 
Пришлось "изобрести" свой таймер, а, точнее, приспособить решение, изложенное в руководстве.  
 
Вот две ПП:
 
:TIMER (TM)
  local F
  F = [dir 0]+'timer.fil'          создаем произвольный файл
  [:INITFILE F]                      ПП [ : INITFILE] описана в другой веточке см ниже
  loaddir F                             считываем парамерты этого файла
  T = [ged 'ldt.1']                  время модификации этого файла  
return (T)
*
:TIMEDCD (T)                       декодирование временного интервала T=T1-T0
  local se, tp, ho, mi, da, mo, ye
* Accuracy 2 sec
  se =(T % 32)*2   sec
  T = [tr T/32]; mi = t % 64 minutes
  T = [tr T/64]; ho = t % 32 hours
  T = [tr T/32]; da = t % 32 day
  T = [tr T/32]; mo = t % 16 month
  ye=  T/16
  T = [:STRING ye]+'.'+[:STRING mo]+'.'+[:STRING da]+' '+[:STRING ho]+':'+[:STRING mi]+':'+[:STRING se]
return (T)
*
 
Это решение обеспечивает измерение интервалов времени с точносттью до 2 секунд.
 
ПП [ : INITFILE] описана в веточке  
http://hdru.com/cgi-bin/pp2/YaBB.cgi?board=news;action=display;num=14819 25556
« Изменён в : 28.12.16 в 20:17:28 пользователем: Vladimir » Зарегистрирован

С уважением,
Владимир
mine-R

***



compact & flexible rulezzz

   
Просмотреть Профиль |

Сообщений: 150
Re: Таймер
« Ответить #1 В: 28.12.16 в 22:27:01 »
Цитировать | Править

Интересный вариант с системным штампом создания файла.
 
Но всё-таки, в чём преимущество такого подхода перед стандартным [sf 0,99]?
 
Когда-то, помнится, для каких-то замеров, я даже "шарлатанствовал" и псевдо-доли секунд из концовки [sf 0,9] к результату добавлял  Smiley
Зарегистрирован
Vladimir

****



Я люблю этот Форум!

   
Просмотреть Профиль | WWW |

Сообщений: 264
Re: Таймер
« Ответить #2 В: 28.12.16 в 22:47:54 »
Цитировать | Править

on 28.12.16 в 22:27:01, mine-R wrote:

Но всё-таки, в чём преимущество такого подхода перед стандартным [sf 0,99]?

 
Честно я просто забыл о существовании [sf 0,99] Smiley
Поэтому пришлось напрячься. Однако, получилось, по-моему, не плохо. В моем варианте удобно считать именно интервалы времени, так как [:TIMER] выдает числовые величины и их можно просто вычитать. Разность преобразуется [:TIMEDCD] в читабельнуб строку.
« Изменён в : 28.12.16 в 22:53:43 пользователем: Vladimir » Зарегистрирован

С уважением,
Владимир
Boris, Kiev.

*****



Адепт ФБП  с 1996г.

   
Просмотреть Профиль | E-мэйл

Сообщений: 875
Re: Таймер
« Ответить #3 В: 29.12.16 в 08:37:29 »
Цитировать | Править

on 28.12.16 в 20:14:20, Vladimir wrote:
При отладке отчетных форм частo требуется измерить время, потребное на выполнение того или иного фрагмента кода или всей формы целиком.

 
Возможно, что Вы забыли не только о [sf 0,99], но и о том, что "Начиная с веpсии 3.03 в Сеpвеp встpоен Пpофилеp, пpедназначенный для поиска "узких" мест в пpиложениях ФБП. "
 
Также замечу, что ваши доморощенные способы хронометража гораздо дальше от истины, т.к. профилер Аркадия зрит в корень расхода времени rpt-кода.
Рекомендую внимательно ещё раз прочитать руководство и больше не забывать про уникальную и кучерявую *{{{Wink особенность нашей платформы.
 
 
 
Зарегистрирован
mine-R

***



compact & flexible rulezzz

   
Просмотреть Профиль |

Сообщений: 150
Re: Таймер
« Ответить #4 В: 29.12.16 в 23:54:10 »
Цитировать | Править

on 28.12.16 в 22:27:01, mine-R wrote:
Когда-то, помнится, для каких-то замеров, я даже "шарлатанствовал" и псевдо-доли секунд из концовки [sf 0,9] к результату добавлял  Smiley

Собственно сабж. Нашёл-таки я этот шарлатанский алгоритм, датированный началом "нулевых" годов. Сам по себе код достаточно тривиальный, а вот некоторые пояснения, которые имел привычку делать  "для себя в будущем", спустя время изрядно доставили  Smiley
 
*** Начало замера TIMESTART - TS
TS=[strip[sf 0,99]]
*** Начало замера долей секунд - DS
DS=[sf 0,9]
*** Допустим, что если строка короче 17 симв. дополнять нужно нулями  ( !!? Smiley )
DS=[strip DS]+'00'
*** Для разницы долей на случай если алгоритм будет работать дольше часа  ( !!! А вот это просто расплющило Grin )
DS=[CP DS,11,7]
*** Доля секунды начала замера
NS=[intsn[ce [vl DS]/100]]
*** Полный результат начала замера
TS=TS+':'+NS+[ch 13]
*** Выводим
Начало замера:
printstr TS
***
*** ДЛЯ ВСТАВКИ ИЗМЕРЯЕМОГО ФРАГМЕНТА КОДА
for i=0 to 100000 endfor   ( добавил пару нулей к кол-ву итераций, чтобы "алгоритм" хоть что-то замерил )
***
*** Конец замера TIMEEND - TE
TE=[strip[sf 0,99]]
*** Конец замера долей секунд - DE
DE=[sf 0,9]
*** Дополняем нулями
DE=[strip DE]+'00'
*** Для разницы долей
DE=[CP DE,11,7]
*** Доля секунды конца замера
NE=[intsn[ce [vl DE]/100]]
*** Полный результат конца замера
TE=TE+':'+NE+[ch 13]
*** Выводим
Конец замера:
printstr TE
*** Вычисляем разницу долей секунд
RD=[intsn[ce ([vl DE]/100-[vl DS]/100)]]
Разница в долях:
printstr RD  
 
on 29.12.16 в 08:37:29, Boris, Kiev. wrote:
..."Начиная с веpсии 3.03 в Сеpвеp встpоен Пpофилеp, пpедназначенный для поиска "узких" мест в пpиложениях ФБП. "...

Полностью соглашусь, что при отладке, Профилер - незаменимый инструмент, однако представьте гипотетическую ситуацию :  
Из 1500 строк алгоритма, две третьих строк сами по себе не набирают нужного для замера количества тиков процессора, но суммируясь вместе, эти две третьих всё же становятся фактором (хотя, конечно же, не определяющим). Считаю, что так называемые "доморощенные" алгоритмы, зачастую бывают также очень полезны. Мне несколько раз точно приходилось возвращаться к "бесполезным" наработкам, чтобы извлечь полезные фрагменты кода.  Smiley
« Изменён в : 30.12.16 в 00:32:07 пользователем: mine-R » Зарегистрирован
Boris, Kiev.

*****



Адепт ФБП  с 1996г.

   
Просмотреть Профиль | E-мэйл

Сообщений: 875
Re: Таймер
« Ответить #5 В: 30.12.16 в 16:11:33 »
Цитировать | Править

on 29.12.16 в 23:54:10, mine-R wrote:

Полностью соглашусь, что при отладке, Профилер - незаменимый инструмент, однако представьте гипотетическую ситуацию :  
Из 1500 строк алгоритма, две третьих строк сами по себе не набирают нужного для замера количества тиков процессора, но суммируясь вместе, эти две третьих всё же становятся фактором (хотя, конечно же, не определяющим). Считаю, что так называемые "доморощенные" алгоритмы, зачастую бывают также очень полезны. Мне несколько раз точно приходилось возвращаться к "бесполезным" наработкам, чтобы извлечь полезные фрагменты кода.  Smiley

 
Не уловил, вернее потерял вашу нить размышлений.
Может быть, Вы этого:
Пpофилеp может также измеpить, сколько вpемени Сеpвеp занимался выполнением области, выделенной пользователем в любом rpt-файле. Начало области обозначается таким специальным комментарием: *{{{, а ее конец - таким: *}}}
 
недочитали и недопробовали?
Зарегистрирован
mine-R

***



compact & flexible rulezzz

   
Просмотреть Профиль |

Сообщений: 150
Re: Таймер
« Ответить #6 В: 30.12.16 в 21:22:41 »
Цитировать | Править

on 30.12.16 в 16:11:33, Boris, Kiev. wrote:

Не уловил, вернее потерял вашу нить размышлений.
Может быть, Вы этого:
Пpофилеp может также измеpить, сколько вpемени Сеpвеp занимался выполнением области, выделенной пользователем в любом rpt-файле. Начало области обозначается таким специальным комментарием: *{{{, а ее конец - таким: *}}}
 
недочитали и недопробовали?

 
Постоянно использую при отладке Профилер в разных вариациях. Красной нитью - наверное вопрос лени  Smiley Или же я неверно использую эти измерительные комментарии. Иногда приходится либо много таких фрагментов выделять, либо выделять один, но затем производить арифметические операции над результатом.
 
Что же касается "алгоритма"...  Был заказ на вывод в отчёты графы "Время  автоматизированной обработки", причем иногда последовательно для всех подразделений. Наверное и сегодня решал бы такую задачу подобным алгоритмом. Изъянов в алгоритме, конечно, было бы чуть меньше  Smiley
Зарегистрирован
Vladimir

****



Я люблю этот Форум!

   
Просмотреть Профиль | WWW |

Сообщений: 264
Re: Таймер
« Ответить #7 В: 02.01.17 в 02:01:30 »
Цитировать | Править

Покуда я работал на работе и горячие предновогодние деньки не давали мне возможности ответить, коллеги уже сами  
на все ответили, осталось подытожить. А итог такой: "У всех свои недостатки" (с).
 
Конечно профилер - блестящий инструмет, но до того момента, пока вы не начали использовать ПП. Понятно, без них - ни куда,
поэтому то и были изобретены *{{{ *}}}.
 
Но эти змечательные скобочки - только одни. Если вы их повторите несколько раз, то получите суммарный результат (иногда это может оказаться удобным) и ни чего не поймете.  
 
Если забудете сбросить счетчик профиля %- то получите накопленный результат, и опять ни чего не поймете и придется перезапускать длительно работающую форму еще раз.  
 
Кроме того, удобно (и иногда - это требование начальства!) видеть время выполнения фрагментов кода как раз в в результате работы формы а не по команде % мысленно сопостовляя время выполнения и обскобленный код.
 
Функция [tm] не решает эти проблемы, так как ее точность 1 минута.
 
Функция [sf 0,99] решает эти проблемы, но выдает строку времени в формате не удобном для вычисления интервалов. Кроме того, разрешающая возможность функции [sf 0,99]  - 1 сек. но об этом далее.  
 
А вот таймер основанный на loaddir как раз дает возможность легко считать интервалы времени, как например:
 
T0 = [:TIMER]
...код...
S = [:TIMEDCD [:TIMER] - T0]
Потребовалось ^^^^^S^^^^^^ времени.
 
Однако его разрешающая способность даже чуть хуже, чем у [sf 0,99], а именно 2 сек., что делает проблематичным накопление времени выполнения зацикленных фрагментов кода, как например:
 
TS = 0  накопитель времени
for i=1 to 1000
  T0 = [:TIMER]
  ...код выполняющийся 1~1.5 сек
  TS = TS + [:TIMER] - T0  
enfor
 
В этом случае, по завершению цикла, TS запросто может оказаться нулем вместо 1500 секунд.  
 
Но, не смотря на недосток, идея имеет право на существование. Надо только пользоваться правильно.
 
Пользутесь на здоровье.
« Изменён в : 02.01.17 в 02:13:04 пользователем: Vladimir » Зарегистрирован

С уважением,
Владимир
Страниц: 1  Ответить | Уведомлять | Послать Тему | Печатать

« Предыдущая Тема | Следующая Тема »

Powered by YaBB 1 Gold - SP 1.3.2!
Forum software copyright й 2000-2004 Yet another Bulletin Board