Имя: Пароль:
1C
1С v8
Кто использует подсистему "ОценкаПроизводительности" из БСП подскажите.
0 VVi3ard
 
18.11.13
19:13
Не пойму как управлять замерами на клиенте...

На сервере понятно:

Начало Процедуры
1. ВремяНачала = ОценкаПроизводительностиКлиентСервер.НачатьЗамерВремени()
..Много кода который замеряем...
ОценкаПроизводительностиКлиентСервер.ЗакончитьЗамерВремени(КлючеваяОперация, ВремяНачала)
Конец Процедуры

Если на сервере нужно в рамках нескольких процедур (т.е. начали на сервере, потом вернулись на клиент, потом вернулись на сервер Простой пример проведение:ПередЗаписью(Сервер)/ПриЗаписи(Клиент)/ОбработкаПроведения(сервер) )

Тут тоже более менее понятно, Нужно сохранить  ВремяНачала между вызовами сервера

С клиентом сразу же начинаются "фокусы"
Так если нужно замерить время открытия формы элемента необходимо стартовать замер из формы списка (или другого места откуда инициируется открытие формы, если же такого места нет то вообще время открытия формы не засечь) а система потом сама после выполнения всего кода (этот момент вообще слабо понятен) активирует завершение замера через подписку.

Получается что нет возможности прописать замер времени открытия формы в самой форме, т.е. ПриСозданииНаСервере() запускаем замер, ПриОткрытии (В конце процедуры) завершаем замер.

Пока все что приходит в голову:
ПриСозданииНаСервере - выполняем: ВремяНачала = ОценкаПроизводительностиКлиентСервер.НачатьЗамерВремени()
Сохраняем "ВремяНачала" в ДопСвойствах Объекта или Формы

Затем в конце "ПриОткрытии" вызываем серверную процедуру: ОценкаПроизводительностиКлиентСервер.ЗакончитьЗамерВремени(КлючеваяОперация, ВремяНачала);

В общем то такой способ будет работать но это еще +1 серверный вызов.

Гораздо красивее если мы используем клиентский стек(коллекцию?): "ОценкаПроизводительностиЗамерВремени" (Она содержит все текущие замеры).
Тогда получается такая схема:

ПриСозданииНаСервере - выполняем: ВремяНачала = ОценкаПроизводительностиКлиентСервер.НачатьЗамерВремени()
Сохраняем "ВремяНачала" в ДопСвойствах Объекта или Формы

Затем в конце "ПриОткрытии" своим кодом Помещаем в коллекцию: ОценкаПроизводительностиЗамерВремени наш замер:
БуферЗамера = Новый Соответствие;
БуферЗамера.Вставить("ВремяНачала", ВремяНачала);
БуферЗамера.Вставить("Длительность", ВремяОкончания - ВремяНачала);
БуферЗамера.Вставить("ВремяОкончания", ВремяОкончания);
БуферЗамера.Вставить("ДатаОкончания", ДатаОкончания);

БуферКлючевойОперации.Вставить(ДатаНачала,БуферЗамера);

ОценкаПроизводительностиЗамерВремени.Замеры.Вставить(КлючеваяОперация,БуферКлючевойОперации);

В итоге замер будет записан при первом вызове обработчика ожидания: "ЗаписатьРезультатыАвто"


В общем как то все сложно получается с одной стороны, с другой стороны я не вижу другого способа сделать замер который начинается на сервере(ПриСозданииНаСервере) а заканчивается на клиенте(ПриОткрытии).

Может кто то уже сталкивался с такой проблемой?
1 banco
 
18.11.13
19:26
(0)  а чем не устраивает запуск замера в форме списка?
2 VVi3ard
 
18.11.13
20:20
(1) Есть формы которые могут открываться не из формы списка, есть формы которые могут открываться из многих списков (плюс конфигурация только частично на поддержке, могут быть дописаны открытия форм в модулях которые ведет клиент).
3 banco
 
18.11.13
23:21
(2)  какая разница откуда открывается, необязательно замерять все открытие формы, достаточно в одном месте прописать, откуда часто открывается. Ты же не собираешься все формы замерять, обычно замеряют несколько форм, с которыми постоянно работают пользователи
4 VVi3ard
 
19.11.13
10:10
(3) Вообще была мысль сделать подписку или вставить код во все формы, но записывать только те которые открываются дольше комфортного минимума в 2 секунды. Т.к. система огромная, состоит из множества подсистем, и пока находится на этапе "Понять где вообще у нас проблемы" т.к. напрямую с пользователями мы не связаны и особо фидбек от них не получаем, а если и получаем он тонет в потоке более важных проблем.
Как то так.
В целом понятно что делать с замерами.

Сделаю подписку на менеджеры объектов на событие "ПолучитьФорму", допишу в клиентской части код который не только фиксрует ранее начатые замеры (Процедура: Процедура ЗакончитьЗамерВремени) а помещает замер целиком.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс