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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ускоренное создание объектов в 1С
Ответ #15 - 04. Июля 2008 :: 12:26
Печать  
artbear писал(а) 04. Июля 2008 :: 10:53:
В принципе уже существующее ускорение создание объектов (ДмитрО + я) - основано на схеме из п.1, только вместо тупого, тормозного перебора идет очень быстрый поиск в CIStringMap,  а далее также создание из Рантайм-класса, и опять вызов ИнитОбъект.

Дак я помню.
Странно, что несмотря на это, прямое создание объекта у тебя выполняется в 5 раз быстрее для ИТ.
  

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


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

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

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С
Ответ #17 - 08. Июля 2008 :: 13:11
Печать  
Реализация для icpp готова.
Выкладываю тестовую сборку для сравнения скоростей создания.
В архиве есть готовая обработка для сравнения скоростей.

Текущие ограничению
1. по умолчанию включен самый быстрый режим создания объектов
2. Супербыстрый режим создания пока реализован только для ИндексированнаяТаблица и Структура
3. Для переключения между различными режимами создания есть тестовый (временный) метод Фабрика::ТестОтключитьБыстроеСоздание_Артур(Парам), где
Парам = 0 - включить мое быстрое создание (по-умолчанию)
Парам = 1 - создание объектов через чистое 1С - т.е. режим быстрого создания объектов в 1С++ просто отключен
Парам = 2 - создание объектов также, как в текущей 1С++ (3.0 или 2.5)
Метод тестовый и в основной сборке его не будет.

Мои результаты на 1000 созданий различных объектов.
Цитата:
создание ИндексированнаяТаблица - чистый 1С - 230 (1000)
обычное создание ИндексированнаяТаблица - текущее 1С++ - 113 (1000)
создание Структура - чистый 1С - 78 (1000)
СписокЗначений - чистый 1С - 76 (1000)
ТаблицаЗначений - чистый 1С - 71 (1000)
ТаблицаЗначений - 1С++ - 25 (1000)
супер. ускоренное создание ИндексированнаяТаблица - 22 (1000)
обычное создание Структура - текущее 1С++ - 22 (1000)
СписокЗначений - 1С++ - 21 (1000)
супер. ускоренное создание Структура - 20 (1000)


Обалденные результаты Улыбка
  

icpp_speed_artbear.rar ( 521 KB | Загрузки )

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С
Ответ #18 - 08. Июля 2008 :: 13:17
Печать  
Обалдеть - тесты для ИТЗ стали проскакивать просто моментально, почти незаметно - нажал и тут же результаты для 176 тестов, а раньше все-таки приходилось ждать их завершения.

Ура! Улыбка
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ускоренное создание объектов в 1С
Ответ #19 - 08. Июля 2008 :: 13:26
Печать  
Афигеть. Улыбка

А почему в основной сборке не будет?
Или ветку что-ли сделай, чтобы если что с кодом повертеть можно было.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ускоренное создание объектов в 1С
Ответ #20 - 08. Июля 2008 :: 13:29
Печать  
kms писал(а) 08. Июля 2008 :: 13:26:
А почему в основной сборке не будет?
Или ветку что-ли сделай, чтобы если что с кодом повертеть можно было.

Основной код я только что залил в репозитарий.
Думаю сейчас выложить сборку 3.0.1.8

А в сборке никогда не будет тестового метода ФабрикаОбъектов::ТестОтключитьБыстроеСоздание_Артур(Парам) - т.к. он фактически нужен только для сравнения, а в реальных базах не нужен.

ЗЫ хотя могу и залить, если все-таки нужно,
все равно метод у меня через переменную препроцессора реализован, т.е. я ее просто отключаю, и метода нету Улыбка
  

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С
Ответ #21 - 08. Июля 2008 :: 13:31
Печать  
Да, и в репозитарии пока ускорены только ИТЗ и Структура.
Остальные объекты, за которым я ответственен, ускорю в ближайшее время.

Михаил, рекомендую и для твоих коллекций, в т.ч. и для Вектора, выполнить реализацию интерфейса Utils1cpp::ICloneCreated.
  

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С
Ответ #22 - 08. Июля 2008 :: 13:36
Печать  
artbear писал(а) 08. Июля 2008 :: 13:29:
kms писал(а) 08. Июля 2008 :: 13:26:
А почему в основной сборке не будет?
Или ветку что-ли сделай, чтобы если что с кодом повертеть можно было.


А в сборке никогда не будет тестового метода ФабрикаОбъектов::ТестОтключитьБыстроеСоздание_Артур(Парам) - т.к. он фактически нужен только для сравнения, а в реальных базах не нужен.

ЗЫ хотя могу и залить, если все-таки нужно,
все равно метод у меня через переменную препроцессора реализован, т.е. я ее просто отключаю, и метода нету Улыбка

Все-таки залил этот тестовый метод в репозитарий, так что в отладочной сборке можно проверять собственные объекты.
  

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


I Love YaBB 2!

Сообщений: 123
Зарегистрирован: 19. Мая 2006
Re: Ускоренное создание объектов в 1С
Ответ #23 - 08. Июля 2008 :: 14:09
Печать  
Артур, а в 2.5 будет ?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ускоренное создание объектов в 1С
Ответ #24 - 08. Июля 2008 :: 14:19
Печать  
Alister писал(а) 08. Июля 2008 :: 14:09:
Артур, а в 2.5 будет ?

Вряд ли, т.к. очень не хочется вести 2 версии.
Возможно, фичи, внесенные нами в 3.0 наподобие моего ускорения, быстрее заставят народ перейти на 3.0, как некоторые уже давно сделали, в т.ч. и я естественно Улыбка
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ускоренное создание объектов в 1С
Ответ #25 - 08. Июля 2008 :: 19:31
Печать  
Артур.
Похоже, должен тебя огорчить.

Вся твоя механика бесполезна.
Ибо единственное, что она делает - это избавляет от InitObject() - и все.

В принципе, если включить логику - это и так понятно.
Ибо создание объекта из рантайм класса не может быть намного медленнее, чем просто создание объекта через new.
Ну, посмотри хотя бы реализацию IMPLEMENT_DYNCREATE - это ни что иное, как простой new.

Можно и эксперементально в этом убедиться - просто заремить в нужном месте CCreatedStrategyFromRuntimeClass

//            pCont->InitObject(szClassName);

и посмотреть на тайминги.

Короче, все прекрасно, но напрасно.
Ну, впрочем, для разминки, наверное, было неплохо. Улыбка

P.S.
Кстати, CIStringMap сам управляет размером hash таблицы в обе стороны, и делает это неплохо.
Так что никаких AutoGrowIfNeeded можно не изобретать.
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ускоренное создание объектов в 1С
Ответ #26 - 08. Июля 2008 :: 20:37
Печать  
Есть простое предложение.

Избавиться от CBLContext::InitObject(LPCSTR).
Огульно делать это нельзя, ибо InitObject может нести полезную нагрузку.

Но чистый CBLContext::InitObject() - это просто HashMethods(), для CMyContextBase и подобных это не нужно.

P.S.
Никогда бы не подумал, что нужно ТАК хешировать методы.
Зачем это делать при каждом создании объекта?

P.P.S.
Корни проблемы тормозов создания ТЗ и СЗ, полагаю, также уходят в InitObject.

P.P.P.S.
Ппц. ;)
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ускоренное создание объектов в 1С
Ответ #27 - 09. Июля 2008 :: 03:39
Печать  
Согласен, наверное, все так и есть Улыбка
На всякий случай проверю различные варианты.

ЗЫ По AutoGrowIfNeeded - фактически это исходный код ДмитрО, автора CIStringMap, поэтому я его использовал, типа автору виднее.
  

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С
Ответ #28 - 09. Июля 2008 :: 03:57
Печать  
kms писал(а) 08. Июля 2008 :: 19:31:
Артур.
Похоже, должен тебя огорчить.

Вся твоя механика бесполезна.
Ибо единственное, что она делает - это избавляет от InitObject() - и все.


Нет, все-таки не настолько безполезна Улыбка
1. Все-таки моя схема немного, но выигрывает у схемы без InitObject()
2. Самое главное - моя схема позволяет много большее - она добавляет к классу технику созданию объекта из прототипа объекта. А т.к. класс намного лучше знает о своем создании, чем его окружение, он может и намного более эффективно создать объект.
Например, для пользовательского класса (а он ведь очень медленно создается даже в режиме оптимизации) можно не выполнять довольно медленный поиск статических данных класса из системных данных, а просто скопировать их из прототипа, и будет достигнуто ускорение.

Поэтому предлагаю компромиссное решение -
оставляем мою схему + избавляемся от InitObject для некоторых классов.

Например, в CMyContextBase в InitObject не делаем вызов CBLContext::InitObject и т.д.
  

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С
Ответ #29 - 09. Июля 2008 :: 04:08
Печать  
[quote author=kms link=1215146216/15#26 date=1215549440]
Избавиться от CBLContext::InitObject(LPCSTR).
Огульно делать это нельзя, ибо InitObject может нести полезную нагрузку.

Но чистый CBLContext::InitObject() - это просто HashMethods(), для CMyContextBase и подобных это не нужно.
[/quote]
А ты смотрел CBLContext::InitObject(CType const&) ?
Там такой же код или что-то еще ?
  

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 
ОтправитьПечать