Переключение на Главную Страницу Страницы: 1 2 3 [4] 5 6 ... 10 ОтправитьПечать
Очень популярная тема (более 25 ответов) к вопросу быстродействия индексированных таблиц. (число прочтений - 57430 )
vlf
Junior Member
**
Отсутствует



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #45 - 30. Января 2007 :: 15:22
Печать  
Стояло только отлучиться, а здесь мне мылят шею.

Цитата:
Можно объяснить смысл тестирования элементарных операций вместо интегральной оценки эффективности решений?


Все с интегральной оценки и началось. Переделал код на ИТЗ, и алгоритм стал работать медленее.
Дальше начал тестировать в чем причина. Результатами поделился со всеми.
На основе интегральных выводов, в своих разработках буду использовать старые решения.
Кстати
интегральная оценка эффективности решений у ИТЗ ниже.


Цитата:
Вопрос масштабирования решений (зависимость результатов от размера набора тестовых данных) рассматривался?


Именно это я и делал. Тест проводился на критическом по быстродействию участке.
При меньшем объеме данных, наверное, не стоит гнаться за 1мс.

К объему данных: Кто успел скачать код, обратите внимание, что выборка некоторых данных идет не из таблиц 1С.

Данные имеют достаточно большой объем.

Цитата:
Можно привести пример оптимального алгоритма, в котором поиск выполняется по двум (а по 10?) колонкам (составной индекс), в котором ИТ проигрывает на любых данных?


Есть, и весьма эффективный.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #46 - 30. Января 2007 :: 15:26
Печать  
Для тупых оба поясните, что подразумевается под "интегральная оценка эффективности решений"?
kms и vlf
  

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: к вопросу быстродействия индексированных табли
Ответ #47 - 30. Января 2007 :: 15:42
Печать  
vlf
Ну не обижайся, мы же договорились Улыбка

А нет планов сделать относительный анализ решений на основе ООП и процедурного программирования в 1С?
У меня сильное подозрение, что ООП тоже должно слить грамотным процедурным решениям.

Как думаешь?

artbear писал(а) 30. Января 2007 :: 15:26:
Для тупых оба поясните, что подразумевается под "интегральная оценка эффективности решений"?
kms и vlf

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

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #48 - 30. Января 2007 :: 16:14
Печать  
Все равно я не согласен с vlf !!
Я проанализировал твой код и точно знаю, что твой подсчет времени работы цикла абсолютно НЕВЕРЕН Печаль

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

Соответственно, здесь также ошибка.

1) Для ИТЗ ты считаешь общее время работы вместе с ненужно повторной выборкой и получением строк по и индексу, в итоге у тебя и время получается гораздо больше.
2) в твоем выложенном примере нет отдельного подсчета для ПолучитьСтрокуПоНомеру и НайтиЗначение Печаль
Откуда тогда ты взял эти данные?

Еще раз - используй мои классы таймера.
Тогда все просто и точно

для ТЗ
Код
Выбрать все
Таймер = СоздатьОбъект("Общие.ТаймерСКоличеством");
//начало главного цикла
Таймер.Запуск("НайтиЗначение");
Если Табл.НайтиЗначение(лекс,стр,"Лексема")=1 Тогда
	Таймер.Стоп("НайтиЗначение");

	// для след.строк специально отключаем подсчет
	//Таймер.Запуск("ПолучитьСтрокуПоНомеру");
	Табл.ПолучитьСтрокуПоНомеру(стр);
	//Таймер.Стоп("ПолучитьСтрокуПоНомеру");

	Для х=стр по Табл.КоличествоСтрок() Цикл
		Таймер.Запуск("ПолучитьСтрокуПоНомеру");
		Табл.ПолучитьСтрокуПоНомеру(х);
		Таймер.Стоп("ПолучитьСтрокуПоНомеру");
		Если лекс<>Табл.Лексема Тогда
			Прервать;
		КонецЕсли;  
		// что-то делаем
	КонецЦикла;
Иначе
	Таймер.Стоп("НайтиЗначение");
КонецЕсли;
//конец главного цикла
Сообщить("Время/Количество - " +Таймер.ПолучитьВсеКакСтроку());
 



для ИТЗ
Код
Выбрать все
Таймер = СоздатьОбъект("Общие.ТаймерСКоличеством");
//начало главного цикла
Таймер.Запуск("УстановитьВыбратьПолучить");
Табл.УстановитьФильтр(лекс,лекс,"индЛексема");
Табл.ВыбратьСтроки("индЛексема");
Если Табл.ПолучитьСтроку("индЛексема")=1 Тогда
	Таймер.Стоп("УстановитьВыбратьПолучить");

	Табл.ВыбратьСтроки("индЛексема");

	Пока 1=1 Цикл
		Таймер.Запуск("ПолучитьСтрокуПоНомеру");
		Если Табл.ПолучитьСтроку("индЛексема")=0 Тогда
			Таймер.Стоп("ПолучитьСтрокуПоНомеру");
			Прервать;
		Иначе
			Таймер.Стоп("ПолучитьСтрокуПоНомеру");
			// что-то делаем
		КонецЕсли
	КонецЦикла;
Иначе
	Таймер.Стоп("УстановитьВыбратьПолучить");
КонецЕсли;
//конец главного цикла
Сообщить("Время/Количество - " +Таймер.ПолучитьВсеКакСтроку());

 

  

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: к вопросу быстродействия индексированных табли
Ответ #49 - 31. Января 2007 :: 04:58
Печать  
artbear писал(а) 30. Января 2007 :: 16:14:
Все равно я не согласен с 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: к вопросу быстродействия индексированных табли
Ответ #50 - 31. Января 2007 :: 07:13
Печать  
artbear писал(а) 30. Января 2007 :: 15:26:
Для тупых оба поясните, что подразумевается под "интегральная оценка эффективности решений"?
kms и vlf


Есть такая теория - задачи принятия решения автор Саати (конец 70х).
Если оценку разложить по иерархии и оценить преимущества одного над другим - получим некоторую итоговую оценку (типа интегральную)
  

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



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #51 - 31. Января 2007 :: 07:17
Печать  
kms писал(а) 30. Января 2007 :: 15:42:
У меня сильное подозрение, что ООП тоже должно слить грамотным процедурным решениям.


конечно "сольет". Также как и Си (например) "сольет" Assembler-у.

И здесь появляется "типа интегральная оценка"


kms писал(а) 30. Января 2007 :: 15:42:
Ну это значит, что на задачах vlf нет смысла использовать ИТ, т.к. решения, построенные на ТЗ как минимум не менее эффективны.

Что такое хорошо и  плохо, сейчас постараюсь ответить
  

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



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #52 - 31. Января 2007 :: 07:27
Печать  
artbear писал(а) 30. Января 2007 :: 16:14:
1) Для ИТЗ ты считаешь общее время работы вместе с ненужно повторной выборкой и получением строк по и индексу, в итоге у тебя и время получается гораздо больше.
2) в твоем выложенном примере нет отдельного подсчета для ПолучитьСтрокуПоНомеру и НайтиЗначение Печаль
Откуда тогда ты взял эти данные?


Там все верно. Даже если  мереется "повторной выборка"  5мс/477итерации = на 2 порядка (т.е в 100раз) меньше принятой погрешности измерения (1-3 мс)

Устал я объяснять.
Ну кто-нибудь сделайте свои замеры! Я буду только рад

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

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



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #53 - 31. Января 2007 :: 07:44
Печать  
Итак, что такое хорошо и что такое плохо.

ИТЗ применять во всех случаях лучше, потому что  хм... типа круто - ускоряется все.
Если 1cpp применить нельзя (ну например, глюк какой в ней). - Программист идет на ковер.

Если серьезно, критерии,
1. ИТЗ имеет явные преимущества, когда нужно в БольшоМ объеме данных найти (НайтиСтроку() УстановитьФильтр() ) данные небольшого объема.
2. Программирование в ИТЗ значительно привычнее, меньше шансов сделать ошибку (например, в переменных цикла)
3. При выборке и обработке БольшогО объема данных, с критичным быстродествием ИТЗ сильно проигрывает алгоритму на ТЗ.
4. Алгоритм на ТЗ применим, где нет 1cpp.
5. Если нужно выполнить не только выборку и обработку большого объема, но и в цикле пополнять таблицу - результаты в обоих случаях "не блеск".

В моих задачах, приоритет критерия (3) наивысший, поэтому и итоговая оценка не в пользу ИТЗ
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #54 - 31. Января 2007 :: 07:45
Печать  
vlf писал(а) 31. Января 2007 :: 07:27:
Ну кто-нибудь сделайте свои замеры! Я буду только рад

Сделаю вечером.

vlf писал(а) 31. Января 2007 :: 07:27:
Когда инструмент измерения по скорости сопоставим с измеряемой величиной

С чего ты это взял-то?
Хочешь сказать, что GetPerformance... соизмерим по скорости с ТЗ.НайтиЗначение или ТЗ.ПолучитьСтрокуПоНомеру ? имхо только на очень маленьких таблицах.
  

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: к вопросу быстродействия индексированных табли
Ответ #55 - 31. Января 2007 :: 07:48
Печать  
Без разницы
Цитата:
лучше мерить инструментом, много объектов (итераций) и находить среднее (арифметическое, геометрическое или .... зависит от задачи). В этом случае погрешность измерения оказывается на число итераций (деленое) меньше погрешности инструмента измерения.
  

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



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #56 - 31. Января 2007 :: 08:33
Печать  
Когда, я отказывался давать код, знал точно, что к "повторной выборке" будет цепляться каждый первый.

Но !никто! не заметил, что "повторная выборка" присутствует и в алгоритме с ТЗ.
!Никто! не потылся оценить, какие есть погрешности в измерении времени цикла.

Здесь есть хоть один математик, или только программисты ( к слову, я не математик).

  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: к вопросу быстродействия индексированных табли
Ответ #57 - 31. Января 2007 :: 08:56
Печать  
1. Интерес и микроисследованиям затрат на выборку в условиях сортированного списка, думаю, незначителен или немного меньше. Все же это на самые распространенные условия.

2. Признайся честно, ты ведь не заинтересован в том, чтобы услышать, ты заинтересован в том, чтобы сказать. Соответственно, формируется и аудитория.

3. Выше ты не ответил на вопросы
vlf писал(а) 30. Января 2007 :: 15:22:
Данные имеют достаточно большой объем.

Метамоделировать придется?

Цитата:
Цитата:
Можно привести пример оптимального алгоритма, в котором поиск выполняется по двум (а по 10?) колонкам (составной индекс), в котором ИТ проигрывает на любых данных?


Есть, и весьма эффективный.

Присмотрись, это не ответ на вопрос.
  

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



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #58 - 31. Января 2007 :: 09:00
Печать  
Код ИТЗ не может быть быстрее ПолучитьСтрокуПоНомеру() !!!
Код
Выбрать все
BOOL CVTExtended::funcChooseLine(CValue& RetVal, CValue** params)
вызывает
функцию своего класса
::CallAsFunc(VT.GetContext(), "ChooseLine", RetVal, pParams);
 



Код
Выбрать все
bool CallAsFunc(CBLContext* pContext, char const* sFuncName, CValue& RetVal, CValue** ppParams)
{
	int nMethod = pContext->FindMethod(sFuncName);
	int res = pContext->CallAsFunc(nMethod, RetVal, ppParams);
	//Msg("%s: %i =  %i", sFuncName, nMethod, res);
	return res != 0;
}
 



а что у нас в  pContext ? 

гм..

     CValue VT;
     VT.CreateObject("ValueTable");

Что у нас "ValueTable" ?

  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: к вопросу быстродействия индексированных табли
Ответ #59 - 31. Января 2007 :: 09:10
Печать  
vlf писал(а) 31. Января 2007 :: 09:00:
Код ИТЗ не может быть быстрее ПолучитьСтрокуПоНомеру() !!!
Код
Выбрать все
BOOL CVTExtended::funcChooseLine(CValue& RetVal, CValue** params)
вызывает
функцию своего класса
::CallAsFunc(VT.GetContext(), "ChooseLine", RetVal, pParams);
 



Код
Выбрать все
bool CallAsFunc(CBLContext* pContext, char const* sFuncName, CValue& RetVal, CValue** ppParams)
{
	int nMethod = pContext->FindMethod(sFuncName);
	int res = pContext->CallAsFunc(nMethod, RetVal, ppParams);
	//Msg("%s: %i =  %i", sFuncName, nMethod, res);
	return res != 0;
}
 



а что у нас в  pContext ?  

гм..

     CValue VT;
     VT.CreateObject("ValueTable");

Что у нас "ValueTable" ?


Ах, вот в чем дело, оказывается...

Спасибо за сигнал, это безобразие, какая-то светомаскировка.
Если еще что обнаружишь из непотребного - обращайся.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 3 [4] 5 6 ... 10
ОтправитьПечать