Форум » FiveWin » Ads+Filter+Xbrowse ? » Ответить

Ads+Filter+Xbrowse ?

Dima: Ставлю оптимизированный фильтр и в Xbrowse начинаются тормоза. Тут копал..... Набрел на SetRddAds , попробовал , не помогает. В базе 5000 записей , после установки фильтра порядка 20. В Clipper работает нормально , в консольном варианте Xharbour + TBrowse работает нормально , FWH + функция Browse() тоже нормально. Куда копать ?

Ответов - 20

Pasha: А что за фильтр ? AdsSetAof() ?

Dima: Да нет обычный SET FILTER Фильтр таков '!anl_zer .and. !fanl_zer' и есть активные индексы по этим полям. Не было бы этих индексов тогда бы точно тормозило а так даже с их наличием тормоз тот же. Ситуация с AdsSetAof() такая же...тормозит

Pasha: А rddads разве его оптимизирует ? Он наверное выполняется на клиенте. Попробуй AdsSetAof(cFilter, 2) .. AdsClearAof()


Dima: Pasha пишет: AdsSetAof(cFilter, 2) Точно , что то засиделся я. Но в таком виде тоже тормоз. В Clipper на ура работает вот так Ax_SetServerAOF(cFilter,.t.) Как аналог называется в Xharbour ?

Pasha: Dima пишет: Как аналог называется в Xharbour ? Да это и есть аналог. Только там есть еще 2-й параметр: Option to indicate how the filter should be resolved in the event that the expression cannot be fully optimized. This flag is also used to indicate how filter membership is affected by data changes. Options are ADS_RESOLVE_IMMEDIATE, ADS_RESOLVE_DYNAMIC, ADS_DYNAMIC_AOF, ADS_KEYSET_AOF, and ADS_FIXED_AOF. с ним надо поиграться Лучше в доке ads об этом почитать

Dima: Pasha До лампочки все. set(_SET_OPTIMIZE, .t.) ? AdsSetAof('!anl_zer .and. !fanl_zer',2) // .t. , со вторым параметром игрался , не помогает ? ADSGetAOFoptLevel() // 1 что означает полная оптимизация и все равно тормоз Попробовал AdsSetFilter , и ее не оказалось а в доке есть PS ADS версия 10

Pasha: Возможно, дело все-таки в xbr Попробуй при инициализации сделать oBrw:bKeyNo := {|| 1} oBrw:bKeyCount := {|| 1} и посмотри на скорость Эти блоки кода использует вертикальный скроллбар

Dima: Pasha пишет: oBrw:bKeyNo := {|| 1} oBrw:bKeyCount := {|| 1} В этом случае скролбар стоит на месте (так же пробовал его отключать еще вчера и до лампочки) но тормоз тот же...:( Если использовать функцию (для теста) Browse() то тормоза нет.

ММК: Dima пишет: В этом случае скролбар стоит на месте можно oBrw:nlen:=ORDKEYCOUNT() но это на скорость не влияет Dima пишет: Если использовать функцию (для теста) Browse() то тормоза нет А это говорит о том , что свой бровс ты организовал не рационально. Надо смотреть исходник...

Dima: Pasha пишет: Возможно, дело все-таки в xbr Что еще ориентировочно можно в нем посмотреть (исправить) что бы исправить проблему ?

Dima: ММК пишет: А это говорит о том , что свой бровс ты организовал не рационально. Надо смотреть исходник... Бровс прост и вроде все оптимально [pre2] AdsSetAof('!anl_zer .and. !fanl_zer',2) go top @ 30,5 Xbrowse zobrw ; Size (zvwdlg:nwidth()/2)-10,(zvwdlg:nHeight/2)-60 ; of zvwdlg PIXEL font ofont7 ALIAS "magaz3" ; LINES CELL oCol:= zobrw:AddCol() oCol:cHeader := "Номер" oCol:bStrData := { || transform(magaz3->ndok,"@Z@B 999999999999") } oCol:nHeadStrAlign := AL_CENTER oCol:nDataStrAlign := AL_LEFT ocol:oHeaderFont := oFont3 oCol:= zobrw:AddCol() oCol:cHeader := "Дата" oCol:bStrData := { || dtoc(magaz3->data_n) } oCol:nHeadStrAlign := AL_CENTER oCol:nDataStrAlign := AL_LEFT ocol:oHeaderFont := oFont3 oCol:= zobrw:AddCol() oCol:cHeader := "Клиент" oCol:bStrData := { || magaz3->komu } oCol:nHeadStrAlign := AL_CENTER oCol:nDataStrAlign := AL_LEFT ocol:oHeaderFont := oFont3 zobrw:nHeaderLines := 1 zobrw:bClrRowFocus := { || { CLR_BLACK, RGB(185,220,255) } } zobrw:bClrStd := { || { 0,nrgb(220,233,233) } } zobrw:bclrselfocus:={|| {CLR_BLACK,CLR_YELLOW}} zobrw:lHScroll := .f. zobrw:nStretchCol := 3 // zobrw:lAllowColSwapping:=.f. zobrw:lAllowRowSizing:=.f. zobrw:nMarqueeStyle := MARQSTYLE_HIGHLROW zobrw:lRecordSelector := .f. AEval( zobrw:aCols, {|oCol|oCol:lAllowSizing := .f.,; ocol:bRClickHeader:={||.f.} ,; oCol:bLDClickData:={|| .t.}}) zobrw:bClrGrad = { | lInvert | If( ! lInvert,; { { 0.50, nRGB( 178, 187, 202 ), nRGB( 137, 155, 179 ) },; { 0.50, nRGB( 129, 149, 174 ), nRGB( 114, 132, 156 ) } },; { { 0.50, nRGB( 139, 166, 193 ), nRGB( 69, 119, 170 ) },; { 0.50, nRGB( 52, 104, 152 ), nRGB( 50, 107, 162 ) } } ) } zobrw:setrdd() zobrw:CreateFromCode() [/pre2]

ММК: Dima пишет: Бровс прост и вроде все оптимально Вроде да. Ставится фильтр , потом бровс . Да? Динамики нет , т.е. все фиксировано. На выходе 20 записей , это меньше окошка. Запустили пример- на экране результатКак можно увидеть тормоз? Есди это конечный кусочек , тогда надо возвращаться в самое начало к "следам" на экране и разбираться почему у тебя это происходит. Явление не повсеместное , в моей практике как-то было , но ерунда явно была моя , уже и не помню какая. Судя по форуму это тоже достаточно редкое событие. Объясняют это слабыми машинами- у тебя вроде нет. Плохой сеткой- так вроде ты без нее? Можно предположить что система кривая... Так легко проверить , посмотреть на другой машине. Я бы сначала разобрался с этим. Харбор здесь наверняка не виноват. Ads ? Ну вот у меня базка ( правда меньше 2000 ) фильтры использую сложные, по всем полям правда использую CUSTOM ADDITIVE. И не разовй , как у тебя.

Dima: ММК пишет: Ставится фильтр , потом бровс . Да? Да ММК пишет: Как можно увидеть тормоз? Двигаюсь по записям (вверх,вниз) и все это происходит с задержкой как будто и нет оптимизированного фильтра :(

ММК: Dima пишет: Двигаюсь по записям (вверх,вниз) нажимаешь стрелочку и нет перехода? Пришли пример

Dima: В INIT диалога где живет бровс с фильтром стояло украшательство ;) SETTRANSPARENT(odlg:hWnd,245) Убрал его и тормоз исчез. Спасибо всем кто помогал !!!

fil: А мне нравится делать массив с номерами строк DBF(a la фильтр) и крутить его в фильтре

Dima: Dima пишет: В INIT диалога где живет бровс с фильтром стояло украшательство ;) SETTRANSPARENT(odlg:hWnd,245) Убрал его и тормоз исчез. В этой связи вопрос. Как сделать полупрозрачным видимую часть диалога не затрагивая контролов которые в нем живут ?

Pasha: У xbrowse есть какой-то странный метод DelRepos, может из-за него тормоз ?

ММК: Pasha пишет: У xbrowse есть какой-то странный метод DelRepos, может из-за него тормоз ? ::DelRepos() // if the row is deleted for RDD Да не... Дима уже разобрался, палку в колесо он всунул сам.. А xbrowse быстрый и вообще ... хороший :)))

Dima: Pasha пишет: А rddads разве его оптимизирует ? Вспомнил :) Это я Xharbour c Сlipper попутал. Там в AOF.CH присутствует #command SET FILTER TO <xpr> ; => aofSetFilter( <"xpr"> )



полная версия страницы