Переключение на Главную Страницу Страницы: 1 ... 6 7 [8] 9 10  ОтправитьПечать
Очень популярная тема (более 25 ответов) к вопросу быстродействия индексированных таблиц. (число прочтений - 57301 )
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #105 - 01. Февраля 2007 :: 11:15
Печать  
vlf писал(а) 01. Февраля 2007 :: 10:45:
Цитата:
По сравнению со временем выполнения замеряемых методов, собственно вызов метода - ничтожно малая величина.

Позволю не согласиться.

Тестим?

Твое право. Мне что-либо доказывать не интересно. Для себя я сделал вывод (возможно, ошибочный) и он меня вполне устраивает. И подтверждается моей лично практикой.
  

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



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #106 - 01. Февраля 2007 :: 11:20
Печать  
Цитата:
Для себя я сделал вывод (возможно, ошибочный) и он меня вполне устраивает. И подтверждается моей лично практикой.


Тогда тему закрываем. У меня нет цели, кому-то что-то доказать.

PS
Со своей правдой да в чужой монастырь.
« Последняя редакция: 01. Февраля 2007 :: 12:32 - vlf »  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #107 - 01. Февраля 2007 :: 12:58
Печать  
vlf писал(а) 01. Февраля 2007 :: 10:27:
Цитата:
Что есть реальная задача
[quote]
Даже при 10 попытках поиска  - а в реале их наверняка больше будет !  


именно
10 попыток Смех

Ты как-то расшифровывай свои посты - нифига же не понятно?
Даже при 10 попытках поиска ИТЗ выигрывает в твоем алгоритме у ТЗ.

Или ты даже и с этим не согласен?
  

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: к вопросу быстродействия индексированных табли
Ответ #108 - 01. Февраля 2007 :: 13:00
Печать  
Вот поэтому у тебя и выполнение алгоритмов занимает 5 часов, потому что используешь тормозную ТЗ на недостаточно оптимизированных алгоритмах Улыбка
  

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: к вопросу быстродействия индексированных табли
Ответ #109 - 01. Февраля 2007 :: 13:10
Печать  
vlf писал(а) 01. Февраля 2007 :: 10:42:
случай ИТЗ

Время(ИТЗ.ПолучитьСтроку) = Время(ПодготовкаКпереходуВAddIn)+Время(ПоискаФункцииПоИмени)+
ВИндексе)+Время(ПозиционированияТаблицы)+Время(ВозвратВКод1С)

Случай ТЗ

С)

В втором случае нет поиска индекса и поска в индексе след позиции


При работе родных методов 1С происходит абсолютно тоже самое, что и при работе методов 1С++, только более тормознуто.
Это уже доказано не один раз.

Например,
ВызовФункции1С = ПодготовкаКпереходуВAddIn (большая часть объектов 1С также хранится в длл-файлах + ПоискФункцииПоИмени (очень тормозной в 1С, в отличие от 1С++) + ПереходКНужномуКоду + ВозвратВКод1С

ИТЗ (ПоискИндексаПоИмени) - а ты в доке не читал, что индекс также можно просто по номеру задавать?

Инкрементпеременной1ССравненияНаконец, СравнениеПеременных1С - также не самая быстрая операция, т.к. интерпретатор.
и т.д. и т.п.

ЗЫ прежде чем сверять подобные вещи, ты бы залез в код 1С и 1C++ и сравнил бы реализации.

Но естественно, что последовательная выборка из ТЗ будет превосходить выборку по индексу из ИТЗ.
Но если при этом происходит поиск, ИТЗ сделает ТЗ в несколько раз и время выборки тут будет играть очень малое значение.
  

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



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #110 - 01. Февраля 2007 :: 13:18
Печать  
Алгоритмы я показывал.

Естественно, речь идет об оптимизированном алгоритме на ТЗ и "штатном" алгоритме ИТЗ

ИТЗ работает медленее (хочу я этого или нет; выношу из цикла повторную выборку или присваиваю каждый раз  переменную в цикле).

Ради быстродействия я переписывал код и скачивал новую версию 1cpp.
Ради быстродействия, часть кода этого расчета у меня в AddIn.

Будет время, перепишу ВЕСЬ код алгоритма на C++.

ЗЫ
Тема закрыта
« Последняя редакция: 01. Февраля 2007 :: 14:45 - vlf »  

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



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #111 - 01. Февраля 2007 :: 13:21
Печать  
Цитата:
ЗЫ прежде чем сверять подобные вещи, ты бы залез в код 1С и 1C++ и сравнил бы реализации.


Где взять код 1с?


Цитата:
Но если при этом происходит поиск, ИТЗ сделает ТЗ в несколько раз


особенность алгоритма - поиска в цикле нет
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #112 - 01. Февраля 2007 :: 13:23
Печать  
vlf писал(а) 01. Февраля 2007 :: 13:18:
ИТЗ работает медленее (хочу я этого или нет; выношу из цикла повторную выборку или присваиваю каждый раз  переменную в цикле).

Если уж ты ругаешь ИТЗ, будь добр и пиши точное условие, при котором ИТЗ медленне ТЗ.
Т.е.
Цитата:
Последовательная выборка из ТЗ будет превосходить выборку по индексу из ИТЗ и то не слишком сильно, не в несколько раз, а всего на какие-то проценты.


ИМХО все остальные выводы про медленность ИТЗ - это уже домыслы.
  

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: к вопросу быстродействия индексированных табли
Ответ #113 - 01. Февраля 2007 :: 13:28
Печать  
vlf писал(а) 01. Февраля 2007 :: 13:21:
Где взять код 1с?

Дизассемблировать только, другого нет Печаль
Например, IDA
  

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: к вопросу быстродействия индексированных табли
Ответ #114 - 01. Февраля 2007 :: 13:30
Печать  
artbear писал(а) 01. Февраля 2007 :: 13:23:
Цитата:
Последовательная выборка из ТЗ будет превосходить выборку по индексу из ИТЗ


и то не слишком сильно, не в несколько раз, а всего на какие-то проценты Улыбка
  

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



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #115 - 01. Февраля 2007 :: 13:31
Печать  
Я, конечно, не перечитывал всю ветку целиком. Но мне почему-то кажется, что vlf так и не показал свой реальный код, на основе которого он сделал свои выводы. Это так?
Если так, то почему? Люди, использующие ИТЗ давно и плотно, могли бы подсказать где и как надо подправить, чтобы оптимально использовать преимущества ИТЗ.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #116 - 01. Февраля 2007 :: 13:34
Печать  
Цитата:
Я, конечно, не перечитывал всю ветку целиком. Но мне почему-то кажется, что vlf так и не показал свой реальный код, на основе которого он сделал свои выводы. Это так?

Нет, он выкладывал свой код.
Правда, его не запустишь, свои какие-то структуры Улыбка
Я сильно не разбирался, но мне там не понравилось засилие таблиц и кучи каких-то вложенных циклов, имхо слишком сложновато как-то.
И что-то сомневаюсь я, что там мало поиска.

Мой опыт мне говорит, что как раз поиск - одна из самых постоянных задач в нашей работе Улыбка
  

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



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #117 - 01. Февраля 2007 :: 14:30
Печать  
Цитата:
Но мне почему-то кажется, что vlf так и не показал свой реальный код

Сегодня утром выложена _.ert, которая проста как код в школьном учебнике.
Скачиваем, модифицируем КАК ВАМ НРАВИТСЯ и тестим вдоль и поперек.
Хватит "собачку" мучить.
  

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



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #118 - 01. Февраля 2007 :: 14:36
Печать  
Не нравится скачивать ?
Код
Выбрать все
Процедура Сформировать()	    
	Перем з1;			  
	q=1000;  // здесь ставим число своих мегабайт на машине

	тз=СоздатьОбъект("ТаблицаЗначений");
	ИТз=Создатьобъект("ИндексированнаяТаблица");

	ТЗ.Новаяколонка("Ключ");
	ТЗ.Новаяколонка("Значение");
	ТЗ.Новаяколонка("Значение2");

	ИТз.Новаяколонка("Ключ");
	ИТз.Новаяколонка("Значение");
	ИТз.Новаяколонка("Значение2");
	Для ё=1 по q Цикл
		Для й=1 по 1000 Цикл
			Тз.НоваяСтрока();
			Тз.Ключ=ё;			Тз.Значение=й;			Тз.Значение2=й;

			ИТз.НоваяСтрока();
			иТз.Ключ=ё;		 иТз.Значение=й;			иТз.Значение2=й;
		Конеццикла;
	Конеццикла;

	Итз.ДобавитьИндекс("индКлюч","Ключ");
	Предупреждение("Таблицы заполнены",2);

	Для ё=1 по 3 Цикл
		ИщемЭто=ё+(ё-1)*(q/2-2);  
		    
		стр=0;
		м1=_GetPerformanceCounter();

		ИТЗ.УстановитьФильтр(ИщемЭто,ИщемЭто,"индКлюч");
		Итз.ВыбратьСтроки("индКлюч");
						    
		м2=_GetPerformanceCounter();

		Пока ИТЗ.ПолучитьСтроку("индКлюч")=1 Цикл
			стр=стр+Итз.Ключ+Итз.Значение+Итз.Значение2;
		КонецЦикла;			    

		м3=_GetPerformanceCounter();

		стр1=0;

		м4=_GetPerformanceCounter();

		птр="";
		Если ТЗ.НайтиЗначение(ИщемЭто,птр,"Ключ")=1 Тогда
						    
			м5=_GetPerformanceCounter();

			Для й=птр по ТЗ.КоличествоСтрок() Цикл
				ТЗ.ПолучитьСтрокуПоНомеру(й);
				з1=ТЗ.Ключ;
			  Если з1<>ИщемЭто Тогда
					Прервать;
				КонецЕсли;

			   стр1=стр1+з1+ТЗ.Значение+ТЗ.Значение2;
			КонецЦикла;			    

		    м6=_GetPerformanceCounter();

		КонецЕсли;
		    
		Если ё=1 Тогда
			Сообщить("Выборка в начале списка");
		ИначеЕсли ё=2 Тогда
			Сообщить("Выборка в середине списка");
		Иначе
			Сообщить("Выборка в конце списка");
		Конецесли;

		Сообщить("Время ИТЗ.УстановитьФильтр+ВыбратьСтроки() "+Число(м2-м1)+" Общее время цикла "+Число(м3-м2));
		Сообщить("Время			 ТЗ.НайтиЗначение() "+Число(м5-м4)+" Общее время цикла "+Число(м6-м5));
		Сообщить("Отставание "+Число(((м3-м2)-(м6-м5))/1000));

	КонецЦикла;
КонецПроцедуры

 

  

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



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #119 - 01. Февраля 2007 :: 14:39
Печать  
vlf писал(а) 01. Февраля 2007 :: 14:30:
Цитата:
Но мне почему-то кажется, что vlf так и не показал свой реальный код

Сегодня утром выложена _.ert, которая проста как код в школьном учебнике.
Скачиваем, модифицируем КАК ВАМ НРАВИТСЯ и тестим вдоль и поперек.
Хватит "собачку" мучить.

Мммм... Скачал. Запустил. Получил:
Код
Выбрать все
Выборка в начале списка
Время ИТЗ.УстановитьФильтр+ВыбратьСтроки() 36 Общее время цикла 8
Время			 ТЗ.НайтиЗначение() 29 Общее время цикла 10
Отставание -0.004
Выборка в середине списка
Время ИТЗ.УстановитьФильтр+ВыбратьСтроки() 0 Общее время цикла 7
Время			 ТЗ.НайтиЗначение() 107 Общее время цикла 10
Отставание -0.006
Выборка в конце списка
Время ИТЗ.УстановитьФильтр+ВыбратьСтроки() 0 Общее время цикла 7
Время			 ТЗ.НайтиЗначение() 88 Общее время цикла 10
Отставание -0.006 


Это показывает, что ИТЗ проигрывает штатной ТЗ?
Или я что-то не так сделал? Или что-то не так понимаю?
  

FormEx developer
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 6 7 [8] 9 10 
ОтправитьПечать