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


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #15 - 29. Января 2007 :: 09:22
Печать  
vlf писал(а) 29. Января 2007 :: 08:20:
Предложение
Описание: устанавливает динамический фильтр для указанного индекса. Влияет на ..... , использующие указанный индекс
Боюсь, что если описывать в каждом методе все другие, на кого он повлияет - это приведёт к ещё большим непоняткам, потому что где-то что-то обязательно будет забыто или упущено. Ещё раз повторюсь: в ИТ ничто не делается без индексов. Даже простое обращение к значению колонки (типа, ИТ.к1) тоже смотрит в индекс (тот, что с номером 1).  Это фундаментальное свойство ИТ, и его не нужно описать в каждом методе. Его нужно описать один раз, но так, чтобы было понятно всем.


Цитата:
Описание: устанавливает динамический фильтр на таблицу по указанному индексу.

Поправка. Принципиальная.
Цитата:
Описание: устанавливает динамический фильтр на таблицу по указанному индексу.

  
Наверх
 
IP записан
 
vlf
Junior Member
**
Отсутствует



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #16 - 29. Января 2007 :: 10:08
Печать  
Цитата:
Боюсь, что если описывать в каждом методе все другие, на кого он повлияет - это приведёт к ещё большим непоняткам, потому что где-то что-то обязательно будет забыто или упущено.

Цитата из документации, методы Уже перечислены.
Цитата:
Описание: устанавливает динамический фильтр на таблицу по указанному индексу. Фильтр влияет на работу методов: ВНачало(), ВыбратьСтроки(), ВКонец(), ПолучитьСтроку(), СледующаяСтрока(), ПредыдущаяСтрока(),Свернуть(),Итог(), ЗаполнитьКолонку(), Выгрузить(), Загрузить(), Объединить().


Я предлагаю всего лишь

Цитата:
Описание: устанавливает динамический фильтр  по указанному индексу. Фильтр влияет на использующие индекс  методы: ВНачало(), ВыбратьСтроки(), ВКонец(), ПолучитьСтроку(), СледующаяСтрока(), ПредыдущаяСтрока(),Свернуть(),Итог(), ЗаполнитьКолонку(), Выгрузить(), Загрузить(), Объединить().



  

... истина всегда где-то рядом ...
Наверх
www  
IP записан
 
vlf
Junior Member
**
Отсутствует



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #17 - 29. Января 2007 :: 13:24
Печать  
to artbear
Код
Выбрать все
Проблему решил?
Ускорение должно быть приличное по сравнению с обычной ТЗ
 



Проблему решил.
Работает, по крайней мере, не медленнее чем первый код.
Зато писать меньше, ошибиться сложнее.
  

... истина всегда где-то рядом ...
Наверх
www  
IP записан
 
vlf
Junior Member
**
Отсутствует



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #18 - 29. Января 2007 :: 14:50
Печать  
Более детальный анализ:
Код 2 работает немного медленней чем первый.
Измерения у меня пока по порядковой шкале (т.е что, быстрее чего)
Итак порядковые значения разных тестов (слева таблица значений, справа индексированная таблица
Тест 1: 26мс 38мс
Тест 2: 39мс 96мс

Отставание не большое, но присутствует.

Мой комментарий, функции в ТЗ "легче" и "свои":
В алгоритме с ТЗ вызываемые функции:
НайтиЗначение()
Количество строк()
ПолучитьСтрокуПономеру()

В алгоритме ИТ, все функции работают с бинарным деревом и они "внешние" для 1С
УстановитьФильтр()
ВыбратьСтроки()
ПолучитьСтроку()

« Последняя редакция: 29. Января 2007 :: 15:52 - vlf »  

... истина всегда где-то рядом ...
Наверх
www  
IP записан
 
vlf
Junior Member
**
Отсутствует



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #19 - 29. Января 2007 :: 15:49
Печать  
первые результаты:

НайтиЗначение() работает в 5-7 раз медленне ( в этой задаче) чем УстановитьФильтр()+ВыбратьСтроки()
Что подтверждает указанное в документации на Индексированныетаблицы

Шкала отношений:

слева ТЗ, справа ИТ
четыре теста

23мс   6 мс
16 мс  3 мс
14 мс  2 мс
11 мс  2 мс


Функция ПолучитьСтрокуПономеру() + сравнение двух переменных
и
ПолучитьСтроку()
интервальная шкала
слева ТЗ, справа ИТ
эти-же тесты.

1888мс   3080мс    417итераций  = разница 2.58 мс
2434мс   3448 мс   477итераций = разница 2.15 мс
265мс     411мс      147итераций = разница 1 мс
16мс        38мс      20 итераций = <1мс

Смех как говорится - "Против лома, нет приема, кроме другого лома"
« Последняя редакция: 30. Января 2007 :: 07:43 - vlf »  

... истина всегда где-то рядом ...
Наверх
www  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #20 - 30. Января 2007 :: 05:52
Печать  
выложи все тесты в виде ерт-файла сюда.
Посмотрим, почему такая сильная разница.
  

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



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #21 - 30. Января 2007 :: 07:50
Печать  
Зачем? Недоверяете?
Точно говорю - ошибки нет.
  

... истина всегда где-то рядом ...
Наверх
www  
IP записан
 
vlf
Junior Member
**
Отсутствует



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #22 - 30. Января 2007 :: 07:56
Печать  
Код
Выбрать все
Тз=СоздатьОбъект("ТаблицаЗначений");
Тз.Новаяколонка("Товар");
Тз.Новаяколонка("Что-то там");

Тз......  Наполнить();

Тз.Сортировать("Товар");


Пока Например4теста Цикл
// Фиксируем время здесь "Старт"
  стр="";
  Если Тз.НайтиЗначение(Товар,стр,"товар")=1 Тогда
// Фиксируем время поиска
 	   Для ё=стр по Тз.КоличествоСтрок() Цикл
	Тз.ПолучитьСтрокуПоНомеру(ё);
   	   Если Тз.Товар<>Товар Тогда
		 Прервать;
	  Конецесли;

	    ЧегоТоДелаем();

	  КонецЦикла;
// фиксируем время цикла
  КонецЕсли;
КонецЦикла;


 



Код
Выбрать все
Тз=СоздатьОбъект("ИндексированнаяТаблица");
Тз.Новаяколонка("Товар");
Тз.Новаяколонка("Что-то там");

Тз......  Наполнить();


Тз.ДобавитьИндекс("индТовар","*Товар");



Пока Например4теста Цикл
//Фиксируем время здесь
	 Тз.УстановитьФильтр(Товар,Товар,"индТовар");
	 Тз.ВыбратьСтроки("индТовар");

// Фиксируем время здесь
	   Пока Тз.ПолучитьСтроку("индТовар")=1 Цикл

   		 ЧегоТоДелаем();

	   КонецЦикла;
//Фиксируем время здесь
КонецЦикла;
 


и третий прогон - Считаем число итераций в каждом цикле

Тз - содержит 2 колонки

В начале цикла, чтобы уменьшит число обращений к таблице
значение1=Тз.Значение1;
значение2=Тз.Значение2;
« Последняя редакция: 31. Января 2007 :: 13:57 - vlf »  

... истина всегда где-то рядом ...
Наверх
www  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #23 - 30. Января 2007 :: 08:09
Печать  
А если добавлять индекс после заполнения?
Код
Выбрать все
Тз......  Наполнить();

Тз.ДобавитьИндекс("индТовар","*Товар");
 

  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #24 - 30. Января 2007 :: 08:12
Печать  
vlf писал(а) 30. Января 2007 :: 07:56:
Код
Выбрать все
Тз=СоздатьОбъект("ИндексированнаяТаблица");

	 Тз.УстановитьФильтр(Товар,Товар,"индТовар");
	 Тз.ВыбратьСтроки();
// Фиксируем время здесь
	   Пока Тз.ПолучитьСтроку()=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 записан
 
vlf
Junior Member
**
Отсутствует



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #25 - 30. Января 2007 :: 08:12
Печать  
Sorry, именно так и есть индекс строится после наполнения

и выбратьСтроки() ПолучитьСтроку используют индекс

Имеено поэтому код и не выкладываю. как всегда начнется, почему это, или это.
« Последняя редакция: 31. Января 2007 :: 14:01 - vlf »  

... истина всегда где-то рядом ...
Наверх
www  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #26 - 30. Января 2007 :: 08:15
Печать  
steban писал(а) 30. Января 2007 :: 08:09:
А если добавлять индекс после заполнения?
Код
Выбрать все
Тз......  Наполнить();

Тз.ДобавитьИндекс("индТовар","*Товар");
 


Конечно, именно это рекомендуемый способ.
Иначе много времени уходит на перестройку индексов для каждого вводимого значения.

vlf, покажи цифры с поправленным кодом!
  

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



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #27 - 30. Января 2007 :: 08:17
Печать  
Подтверждение моих слов: ВРЕМЯ СОРТИРОВКИ и СОЗДАНИЯ ИНДЕКСА ЗДЕСЬ НЕ МЕРЕЕТСЯ!

БЕЗ УКАЗАНИЯ ИНДЕКСА В МЕТОДАХ АЛГОРИТМ НОРМАЛЬНО НЕ ЗАРАБОТАЕТ

А дров сколько наломано: Доверять, не доверять.

  

... истина всегда где-то рядом ...
Наверх
www  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #28 - 30. Января 2007 :: 08:22
Печать  
vlf писал(а) 30. Января 2007 :: 08:17:
Подтверждение моих слов: ВРЕМЯ СОРТИРОВКИ и СОЗДАНИЯ ИНДЕКСА ЗДЕСЬ НЕ МЕРЕЕТСЯ!

А дров сколько наломано: Доверять, не доверять.


А тебе что, трудно ВЕСЬ НОРМАЛЬНЫЙ код выложить? Почему тебя все уговаривают?
  
Наверх
 
IP записан
 
vlf
Junior Member
**
Отсутствует



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #29 - 30. Января 2007 :: 08:53
Печать  
Возмите здесь
https://dzone.primecom.ru/tzitz.zip

На этом сайте файлы не прикрепляются
  

... истина всегда где-то рядом ...
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 4 ... 10
ОтправитьПечать