Переключение на Главную Страницу Страницы: 1 2 3 [4]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Ошибки ТП   to  DmitrO (число прочтений - 16658 )
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибки ТП   to  DmitrO
Ответ #45 - 20. Декабря 2006 :: 05:56
Печать  
Uzhast писал(а) 20. Декабря 2006 :: 04:49:
В версии 2.5 перестал работать быстрый поиск для поставщика VFP. При таком исправлении в CV7ODBCProvider::QuickSearch:
Код
Выбрать все
	//param->m_strLabel = "@QSParam";
	param->m_strLabel = "?";
 


начинает работать нормально, но не знаю, насколько корректно это исправление, особо не разбирался, как оно работает.

Полез в 2.5 потому, что в 2.0.3.1 при быстром поиске как-то оно тормозит. Потребление CPU заметно выше, чем в обычном (одинэсном) поиске в форме списка справочника. В 2.5 тормозит, в принципе, точно также. Есть также недостаток: в обоих версия поиск регистрозависимый, что плохо, т.к. юзвери привыкли к одинэсному поиску. В принципе, это можно было исправить, если бы поставщик данных давал бы больше возможностей по управлению поиском. Если искать по UPPER(наименование) LIKE ВРег(подстрока)%, то будет, как в 1С.

Пойти что ли загнать в справочник тысяч 100 элементов...

Сделай, плиз, какой-нибудь тестовый пример, чтобы все могли увидеть данную ошибку с тормозами.
Далее про регистрозависимый поиск - ИМХО очень неудобно, нужно исправлять на регистронезависимый или хотя бы добавить какую-то опцию в ТП для этого.
  

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



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Ошибки ТП   to  DmitrO
Ответ #46 - 20. Декабря 2006 :: 06:21
Печать  
Ёоооо! Я тащусь от OLE DB! Огромное уважение spock'у за идею и реализацию прикручивания этого к 1С! Улыбка Улыбка

Загнал 100000 элементов в справочник "Товары". Раньше поиск элемента по начальной подстроке выполнялся 70 миллисекунд. Теперь на таком запросе
Код
Выбрать все
	|SELECT TOP 1
		|	Товары.Descr AS Наименование,
		|	UPPER(Товары.Descr) AS Индекс
		|FROM
		|	$Справочник.Товары AS Товары
		|WHERE
		|	Товары.Descr LIKE 'Тестовый%'
		|ORDER BY Товары.Descr
 


Время поиска стало равным 870 миллисекунд.
А на таком
Код
Выбрать все
		|SELECT TOP 1
		|	Товары.Descr AS Наименование,
		|	UPPER(Товары.Descr) AS Индекс
		|FROM
		|	$Справочник.Товары AS Товары
		|WHERE
		|	UPPER(Товары.Descr) LIKE 'ТЕСТОВЫЙ%'
		|ORDER BY Индекс -- почему-то не хочет просто ORDER BY UPPER(Товары.Descr)
 


Время осталось равным 70 миллисекунд!!!
Результаты абсолютно понятны. Ведь у 1С стоит индекс по UPPER(Descr). Поэтому первый запрос приводит к полному перебору справочнику, что медленно, а второй работает с использованием индексов   Очень довольный Остается только порадоваться, что провайдер OLE DB такой умный и хитрый Улыбка

Так вот, насколько я понял из исходников, VFP-провайдер использует именно первый вариант запроса, что и приводит к тормозам (и заодно приводит к регистрозависимому поиску).

artbear
Тестовый пример еще нужен? У меня тут специфичная конфа, чтобы не нужно было ее еще скачивать, понадобится переписать для типовой ТиС. Но, в принципе, могу - ничего сложного.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 3 [4] 
ОтправитьПечать