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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Оптимизация IndexedTable
Ответ #15 - 04. Июля 2007 :: 08:31
Печать  
victuan писал(а) 04. Июля 2007 :: 01:24:
3) Нет  метода, который позволяет в таблице переставлять местами строки;
Ведь это можно реализовать, не переделываю концепцию IT?

Насчет совместимости понятно.
Конечно, для удобства можно было бы добавить методы "ВставитьСтроку" или "СдвинутьСтроку".
При наличии индексов эта операция будет вызывать перестроение дерева, как впрочем и добавление строк или изменение значений в индексных колонках.

Цитата:
Тем более kms не отрицает возможность такой доработки

Каюсь, мне в свое время очень хотелось сделать эффективный менеджер памяти для ИТ.
Я помню твои тесты и разные идеи на этот счет.
Но реально обработки таких объемов данных у меня нет, а из чистой романтики делать как-то не хотелось.
Сейчас вообще все мои мысли об 1С/1cpp - чисто в теории, но вот историческая память иногда дает о себе знать Улыбка

Еще раз напишу, что ИТ - это моя давняя мечта еще со времен 7.0 и спасибо Алексею Дирксу за ее осуществление.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Valet
Full Member
***
Отсутствует



Сообщений: 141
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация IndexedTable
Ответ #16 - 04. Июля 2007 :: 10:27
Печать  
victuan писал(а) 04. Июля 2007 :: 04:47:
Прикол в <Знач>, в том, он может быть СписокЗначений и ТаблицаЗначений. Т.е. ТЗ может заполняться шаблоном (pattern), типа тексутрной заливки? Я пока сам еще не до конца исследовал эти возможности, а в документации об этом почти ничего нет.


Синтаксис: ЗаполнитьКолонку([Индекс = ""], Колонка, Источник, [КолонкаИсточника = ""])  (вариант 2)

Параметры:
Индекс - тип: Строка, Число. Идентификатор или номер индекса, по которому
упорядочиваются и фильтруются строки заполняемой таблицы. По умолчанию используется основной индекс.
Колонка - тип: Строка, Число. Идентификатор или номер заполняемой колонки.
Источник - тип: ТаблицаЗначений, СписокЗначений. Источник данных для заполнения колонки.
КолонкаИсточника - номер или идентификатор колонки, из которой будут браться значения. Если параметр не указан, то колонка-источник определяется параметром Колонка. Для списка значений параметр игнорируется.
Описание: заполняет колонку таблицы из колонки другой таблицы (ТаблицаЗначений) или списка значений.


Это выдержка из документации.

  

/ Лень - двигатель прогресса. /
Наверх
ICQ  
IP записан
 
victuan
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 20
Зарегистрирован: 02. Июля 2007
Re: Оптимизация IndexedTable
Ответ #17 - 04. Июля 2007 :: 12:28
Печать  
Цитата:
Но реально обработки таких объемов данных у меня нет, а из чистой романтики делать как-то не хотелось.

Как раз я и затеял все это из-за того, что такая обработка есть и вся ее логика построена на Таблицах Значений (http://infostart.ru/projects/536/?&desc=1).
Я постоянно и успешно ею пользуюсь для органиции переносов данных между различными конфигурациями (Конвертация данных, УРБД, МОД не катят). Вот и хотелось бы оптимизировать ее слабое место, создав эмулятор ТЗ (переписать саму обработку нереально, слишком много кода).

Цитата:
Источник - тип: ТаблицаЗначений, СписокЗначений. Источник данных для заполнения колонки.  
КолонкаИсточника - номер или идентификатор колонки, из которой будут браться значения.

В том то и дело, что смысл здесь другой. Берется не весь источник, а только одна колонка из него.
  
Наверх
 
IP записан
 
Valet
Full Member
***
Отсутствует



Сообщений: 141
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация IndexedTable
Ответ #18 - 05. Июля 2007 :: 05:11
Печать  

Цитата:
Цитата:
Источник - тип: ТаблицаЗначений, СписокЗначений. Источник данных для заполнения колонки. 
КолонкаИсточника - номер или идентификатор колонки, из которой будут браться значения.

В том то и дело, что смысл здесь другой. Берется не весь источник, а только одна колонка из него.

Т.е. методом Заполнить хотца объединить ТаблицыЗначений ? Это интересная фича таблицы значений, но у ИндексированнойТаблицы для этого есть свои методы, и причем более накрученные: Объединить, Разность, Пересечение.
Пока вижу тока один "недостаток" , то что  методы у ТаблицыЗначений и ИндексированнойТаблицы не совпадают. Но думаю это и не задумывалось...
  

/ Лень - двигатель прогресса. /
Наверх
ICQ  
IP записан
 
mash
1c++ donor
Отсутствует


1C++ v. 3.0.1.23

Сообщений: 148
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация IndexedTable
Ответ #19 - 05. Июля 2007 :: 15:59
Печать  
Кстати о ИндексированнойТаблице. У меня есть идея создать нечто подобное используя средства MS SQL. На самом деле работа с данными в скуле реализована более чем "по науке" на мой взгляд, используются там насколько я знаю и бинарные деревья которые положены в основу Индексированной таблицы,  и почему бы не создать просто класс оболочку который заполнялл бы временную таблицу на сервере SQL и не работал бы с ней средствами TSQL. Вообще то я использую некое подобие этого класса в системе моих классов 1С++ , но конечно мечтаю о том чтобы это было более интегрированно в 1С++.
  

Поспешность наносит ущерб
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
victuan
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 20
Зарегистрирован: 02. Июля 2007
Re: Оптимизация IndexedTable
Ответ #20 - 06. Июля 2007 :: 00:57
Печать  
Обнаружил в 1с++ одну не очень приятную вещь. Создание объектов из КОП работает оч-ч-чень медленно.
Выяснилось это так. Для того чтобы сблизить совместимость методов ТаблицыЗначений и IndexedTable я создал наследника для последнего. Получилось, что объект-наследник создается в десятки разов медленне чем сам IT (причем независимо, влкючена ли отладка и где я описал класс - в txt или ert).
Это не критично, если таких объектов нужно создавать немного. Но вся суть, что мне их приходится создаваться очень много (сотни) - они у меня являются значениями ячеек одной большой таблицы - некое подобие древовидной структуры.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация IndexedTable
Ответ #21 - 06. Июля 2007 :: 04:01
Печать  
victuan писал(а) 06. Июля 2007 :: 00:57:
Обнаружил в 1с++ одну не очень приятную вещь. Создание объектов из КОП работает оч-ч-чень медленно.
Выяснилось это так. Для того чтобы сблизить совместимость методов ТаблицыЗначений и IndexedTable я создал наследника для последнего. Получилось, что объект-наследник создается в десятки разов медленне чем сам IT (причем независимо, влкючена ли отладка и где я описал класс - в txt или ert).

Да, есть такое дело Печаль Не забываем, что пользовательские классы работают с помощью интерпретатора 1С, поэтому они и медленнее.
Правда, на моих экспериментах разница была не настолько большая!
Сильно медленно должно идти только первое создание объекта в сеансе работы с 1С, дальнейшее создание будет идти намного быстрее за счет кеширования.
Проверка типов и отладка точно выключены?

ЗЫ народ, в МС ВС++ есть встроенный профайлер или есть какие сторонние средства?
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация IndexedTable
Ответ #22 - 06. Июля 2007 :: 04:02
Печать  
victuan писал(а) 06. Июля 2007 :: 00:57:
Обнаружил в 1с++ одну не очень приятную вещь. Создание объектов из КОП работает оч-ч-чень медленно.

Тест с измерением скорости создания можешь выложить?
  

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


I Love YaBB 2!

Сообщений: 20
Зарегистрирован: 02. Июля 2007
Re: Оптимизация IndexedTable
Ответ #23 - 06. Июля 2007 :: 06:07
Печать  
artbear писал(а) 06. Июля 2007 :: 04:02:
victuan писал(а) 06. Июля 2007 :: 00:57:
Обнаружил в 1с++ одну не очень приятную вещь. Создание объектов из КОП работает оч-ч-чень медленно.

Тест с измерением скорости создания можешь выложить?


ТаблицаЗначений, время (с): 89
IndexedTable, время (с): 167
IndexedTableExt, время (с): 7066

1С++ v:2.5.0.1

Может я не правильно описал Конcтруктор моего класса? Все может быть, проверь пожалуйста.

Запускать ТестТЗскорость.ert
  

TestITspeed.rar ( 24 KB | Загрузки )
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Оптимизация IndexedTable
Ответ #24 - 06. Июля 2007 :: 12:28
Печать  
На 2.0.3.2. с включенной оптимизацией время 50, 100, 600 соответственно.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
victuan
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 20
Зарегистрирован: 02. Июля 2007
Re: Оптимизация IndexedTable
Ответ #25 - 14. Июля 2007 :: 04:15
Печать  
Проверяю на 1cpp-2.0.3.3:

ТаблицаЗначений, время (мс): 137
IndexedTable, время (мс): 182

IndexedTableExt, время (мс): 1769 ... 2237 (время меняется от опыта к опыту, "Оптимизация" включена)

IndexedTableExt, время (мс): 7500 ("Оптимизация" выключена)

Положение кнопки "Отладчик" не влияет на время.

Вывод: пользовательские классы работают ОЧЕНЬ медленно, их применение ограничено.
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Оптимизация IndexedTable
Ответ #26 - 14. Июля 2007 :: 17:29
Печать  
victuan писал(а) 04. Июля 2007 :: 01:24:
2) Существует утечка памяти при хранении строк: CFixedAlloc - менеджер памяти CString

Вот ведь какие совпадения иногда бывают Улыбка Я как раз у себя в ВК собрался переходить с CString на std::string, потому что видел в разных местах упоминания, что даже в стандартной VC6 std::string гораздо быстрее работает. Кстати, тоже заметил, что память забирается и потом системе не отдается. Например, открываем mxl-файл 80Мб - съедается больше 200Мб, после закрытия занятая память не уменьшается. Если файл опять открыть - количество занятой памяти не изменяется. Когда переведу на std::string - сравню, изменилась ситуация или нет Улыбка
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Оптимизация IndexedTable
Ответ #27 - 14. Июля 2007 :: 19:22
Печать  
А, так ты тоже заметил Улыбка
Утечки, конечно, там нет, просто статическое использование памяти.

А еще у CString в MFC42 есть не менее порочная особенность - влияние на общую производительность на NT системах.
Особенно на операциях распределения памяти.
Корни уходят куда-то то ли в сериализацию потоков, то ли рядом, в недра NTDLL.

На первых реализациях ИТ очень было заметно.

Я уже не говорю про всякий хлам типа Структуры и т.п.
Там такие траблы с экспоненциальным замедлением можно было поймать, шо***дец.

К счастью, как я уже говорил, многим везет и они этих проблем не замечают  :lol  Смех
  

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



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Оптимизация IndexedTable
Ответ #28 - 14. Июля 2007 :: 19:36
Печать  
Мне тут почему-то стала какая-то рассылка про C++ приходить (лет сто назад вроде подписывался, а они только сейчас проснулись). Статьи причем откапывают какие-то совсем древние. Например сравнение VC6 и Intel 5 (сейчас у Intel уже 9.1, а у МС - VS2005). Но, т.к. для ВК в 1С 7.7 часто используется VC6, то статьи оказались полезными Улыбка. Вот, например: Сравнительный анализ компиляторов С++. В частности про CString:
Цитата:
Так как Microsoft не рекомендует использовать STL в VC++, для сравнения было добавлено тестирование конкатенации строк на основе родного класса VC++ для работы со строками CString...

Согласно результатам, не рекомендованный STL string работает в 12 раз быстрее, чем родной CString Microsoft! Как тут в очередной раз не задуматься о практичности рекомендаций Microsoft...

Правда, разрыв что-то сильно подозрителен. Возможно, товарищи что-то накосячили в тестах Улыбка
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация IndexedTable
Ответ #29 - 25. Июля 2007 :: 16:13
Печать  
victuan писал(а) 14. Июля 2007 :: 04:15:
Вывод: пользовательские классы работают ОЧЕНЬ медленно, их применение ограничено.

Естественно, ведь работает медленный интерпретатор 1С Печаль
Для тебя вижу следующие выходы:
1) в 1С++ добавить новый объект, у которого будут все методы и свойства штатной ТЗ, а работать этот объект  будет через ИТЗ. Нужно знать С++.
Можешь сделать сам или я сделаю.
Но когда сделаю я, неизвестно Улыбка Вообще не слишком уверен в необходимости этой работы.
2) Сделать подобный объект на Делфи с использованием штатных технологий. Методы ИТЗ вызывать через ОЛЕ.

В этом случае думаю, что тормозов не будет Улыбка
Но работы по написанию кода не так мало Печаль
  

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