Переключение на Главную Страницу Страницы: [1] 2 3 4 ОтправитьПечать
Очень популярная тема (более 25 ответов) Ускоренное создание объектов в 1С (число прочтений - 24974 )
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Ускоренное создание объектов в 1С
04. Июля 2008 :: 04:36
Печать  
Народ, вчера обдумывал проблему медленного создания объектов в 1С
и у меня родился вопрос - почему мы для создания объектов юзаем CreateObject/Instance(ИмяКласса), а не напрямую создаем объект через new CStruct, new CVTExtended и т.д.


В результате проверки этой идеи в 1С++ был реализован подобный подход, пока для примера ускоренное создание ИТЗ и Структуры.

Вот результаты сравнения времени создания объектов:
Цитата:
обычное создание ИндексированнаяТаблица - 280 (1000 вызовов)
СписокЗначений - 162 (1000)
ТаблицаЗначений - 162 (1000)
обычное создание Структура - 112 (1000)
ускоренное создание ИндексированнаяТаблица - 89 (1000)
ускоренное создание Структура - 44 (1000)


Цитата:
обычное создание ИндексированнаяТаблица - 2988 (10000)
ТаблицаЗначений - 1756 (10000)
СписокЗначений - 1540 (10000)
обычное создание Структура - 1265 (10000)
ускоренное создание ИндексированнаяТаблица - 590 (10000)
ускоренное создание Структура - 557 (10000)


Т.е. для ИТЗ ускорение 68%-80% и выше при больших объемах
для Структуры 60%
Соответственно для других объектов 1С++ будет аналогичное ускорение.

Это просто здорово.

Проблем с объектами при подобном создании вроде бы не обнаружено, 1С работает с этими объектами нормально, без всяких проблем.

Что скажете? Какие подводные проблемы я пропустил?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ускоренное создание объектов в 1С
Ответ #1 - 04. Июля 2008 :: 04:40
Печать  
Например, в одном из самом тяжелых методе ИТЗ::Группировать много времени отнимает создание доп. таблиц ТЗПотомки как раз методом CreateObject("IndexedTable"), т.е. при помощи предложенного ускорения создания объекта данный метод должен также довольно сильно ускориться Улыбка

УРА Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Ускоренное создание объектов в 1С
Ответ #2 - 04. Июля 2008 :: 04:46
Печать  
artbear писал(а) 04. Июля 2008 :: 04:40:
Например, в одном из самом тяжелых методе ИТЗ::Группировать много времени отнимает создание доп. таблиц ТЗПотомки как раз методом CreateObject("IndexedTable"), т.е. при помощи предложенного ускорения создания объекта данный метод должен также довольно сильно ускориться Улыбка

УРА Улыбка


+10
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ускоренное создание объектов в 1С
Ответ #3 - 04. Июля 2008 :: 04:49
Печать  
Закономерный вопрос:
Цитата:
Слушай, это тестировать и тестировать надо...
Кто его знает, что 1С-на еще делает при выполнении CreateObject.
Где, например, она начинает ссылки считать на созданные объекты


Я говорю не про все объекты, а только те, поведение которых мы знаем и которым мы можем управлять, например, встроенные объекты 1С++ или других ВК Улыбка


Поведение CreateObject, конечно, более сложное, чем простое new Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ускоренное создание объектов в 1С
Ответ #4 - 04. Июля 2008 :: 05:03
Печать  
Для реализации ускорения для создания различных объектов из ВК, написанных на С++, я планирую следующее:
1. Будет использоваться техника создания объектов по прототипу или клонирование, т.е. каждый объект сам знает, как создавать себе подобных. Этим будет достигнута универсальность.
2. Технически все просто
а) Создается интерфейс типа ICloneCreated c методом
  CBLContext* Clone() const = 0;
б) все объекты, которые хотят быстро создаваться, должны реализовывать этот интерфейс
в) в 1С++ в моем, уже существующем классе ускорения создания объектов CCreateInstanceBoost, будет реализован механизм кеширования -
при создании объекта по имени указанное имя ищется в карте методов,
если в карте не найдено соответствия, объект создается, как обычно, по имени, далее проверяется наличие интерфейса ICloneCreated, если он есть, то создается второй объект, который и заносится в карту методов;
Если в карте найдено соответствия, то создается новый объект путем вызова метода Clone()
В итоге все быстро и удобно.

ЗЫ кстати, подозреваю, что быстрое создание ТЗ и СЗ через сериализованное представление как раз и делается через прямое создание путем new Улыбка

ЗЫ подобное будет только для объектов, созданных на С++ !!
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Ускоренное создание объектов в 1С
Ответ #5 - 04. Июля 2008 :: 05:17
Печать  
+1
Эт хорошо ускорение создания,изза этого приходилось код некторых методов класса выносить из класса в глоб функцию, т.к. тормозит создание классов, на замере производительности полгода назад такое заметил
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ускоренное создание объектов в 1С
Ответ #6 - 04. Июля 2008 :: 05:34
Печать  
Зарегил хотелку http://www.1cpp.ru/bugs/show_bug.cgi?id=3962
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: Ускоренное создание объектов в 1С
Ответ #7 - 04. Июля 2008 :: 06:13
Печать  
+100  Улыбка
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ускоренное создание объектов в 1С
Ответ #8 - 04. Июля 2008 :: 06:17
Печать  
Кстати, вот еще вопрос:
Цитата:
СоздатьОбъект у нас умеет ускоренно создавать ряд блконтекстов путем кеширования RTC.
Научить его так создавать Вектор не достаточно?

Как раз выложенное мной сравнение и есть сравнение через new и через RTC, c обычным 1C, без загруженной 1С++, разница еще больше Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ускоренное создание объектов в 1С
Ответ #9 - 04. Июля 2008 :: 06:36
Печать  
Если бегло, то внутри CValue::CreateObject вызывается следующий код:
* CValue::UnlinkContext();
* CBLContext::CreateInstance()
* CValue::SetType()
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Ускоренное создание объектов в 1С
Ответ #10 - 04. Июля 2008 :: 07:21
Печать  
При группировании индексированной таблицы(по группам) - там кажется создается нехилое
количество подтаблиц - поможет?
Или там уже все оптимизировано?
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Ускоренное создание объектов в 1С
Ответ #11 - 04. Июля 2008 :: 08:26
Печать  
kiruha писал(а) 04. Июля 2008 :: 07:21:
При группировании индексированной таблицы(по группам) - там кажется создается нехилое
количество подтаблиц - поможет?
Или там уже все оптимизировано?


Артур говорил об этом выше... разве нет?
"Например, в одном из самом тяжелых методе ИТЗ::Группировать много времени отнимает создание доп. таблиц ТЗПотомки как раз методом CreateObject("IndexedTable")" - (с) Артур
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Ускоренное создание объектов в 1С
Ответ #12 - 04. Июля 2008 :: 08:42
Печать  
vandalsvq писал(а) 04. Июля 2008 :: 08:26:
kiruha писал(а) 04. Июля 2008 :: 07:21:
При группировании индексированной таблицы(по группам) - там кажется создается нехилое
количество подтаблиц - поможет?
Или там уже все оптимизировано?


Артур говорил об этом выше... разве нет?
"Например, в одном из самом тяжелых методе ИТЗ::Группировать много времени отнимает создание доп. таблиц ТЗПотомки как раз методом CreateObject("IndexedTable")" - (с) Артур


Ок, спасибо, просмотрел Печаль
Но по любому
+10
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ускоренное создание объектов в 1С
Ответ #13 - 04. Июля 2008 :: 08:45
Печать  
artbear писал(а) 04. Июля 2008 :: 04:36:
Что скажете? Какие подводные проблемы я пропустил?

Сначала надо бы посмотреть на реализацию CreateInstance() и понять, почему она настолько медленнее простого создания объекта.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ускоренное создание объектов в 1С
Ответ #14 - 04. Июля 2008 :: 10:53
Печать  
kms писал(а) 04. Июля 2008 :: 08:45:
artbear писал(а) 04. Июля 2008 :: 04:36:
Что скажете? Какие подводные проблемы я пропустил?

Сначала надо бы посмотреть на реализацию CreateInstance() и понять, почему она настолько медленнее простого создания объекта.

Само собой, предварительно я посмотрел реализацию CreateInstance()
Она делает следующее
1. Идет тупой перебор в цикле имен всех зарегистрированных классов, сравнение через lstrcmpiA - вот основной тормоз
Если объект найден, то по полученному индексу получается Рантайм-класс, после чего создается объект pCont = CRuntimeClass::CreateObject(), далее вызывается pCont = CBLContext::InitObject(ИмяКласса)
2. Если объект не найден в цикле, идет попытка создания КОМ, ОЛЕ-объекта

В принципе уже существующее ускорение создание объектов (ДмитрО + я) - основано на схеме из п.1, только вместо тупого, тормозного перебора идет очень быстрый поиск в CIStringMap,  а далее также создание из Рантайм-класса, и опять вызов ИнитОбъект.

Так что в общем, для объектов, чье поведение и создание известно, можно ускорить процесс создания, для чего и будет задействован интерфейс клонирования.

Да и результаты говорят сами за себя.

ЗЫ обычная беда 1С - такое впечатление, что авторы кода 1С не знают, ничего кроме CArray и тупого перебора в цикле Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 4
ОтправитьПечать