unidirectional=true

Модераторы: kdv, CyberMax

victor3000
Сообщения: 98
Зарегистрирован: 27 апр 2006, 09:32

unidirectional=true

Сообщение victor3000 » 18 дек 2006, 18:01

Подскажите, можно ли как-то включить Unidirectional в IBQuery, чтоб потом в DBGrid нормально все отображалось. У меня при открытии таблицы с установленным параметром и после прокрутки грида вниз, а потом вверх отображается полная ахинея.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 18 дек 2006, 18:19

Удивительно даже. С чего бы это, интересно?

victor3000
Сообщения: 98
Зарегистрирован: 27 апр 2006, 09:32

Сообщение victor3000 » 18 дек 2006, 18:29

спасибо, проверил не помогло, может еще есть варианты?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 18 дек 2006, 18:34

что значит "ахинея"? какая версия IBX? действительно ли нужно включать unidirectional в true?

victor3000
Сообщения: 98
Зарегистрирован: 27 апр 2006, 09:32

Сообщение victor3000 » 18 дек 2006, 18:47

версия 7.08
необходимость есть в связи с настоятельными рекомендациями перевести параметр в true при проблеме "out of memory".
ахинея выражаеться в дубляже строк при прокрутке dbgrid, если информация не помещается в один экран.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 18 дек 2006, 19:15

Голубчик, а встать в OI на это слово и F1 нажать не пробовал? А то, знаешь ли, очень забавно выглядит - я включил свойство, приводящее к невозможности обратного скроллирования, так вот, какая-то ахинея получается - невозможно обратно скроллировать! :-D

victor3000
Сообщения: 98
Зарегистрирован: 27 апр 2006, 09:32

Сообщение victor3000 » 18 дек 2006, 19:19

вот эмуляция проблемы, код и база. архив небольшой 400kB, посмотрите.
ftp://1:1@213.186.210.150/test.rar

victor3000
Сообщения: 98
Зарегистрирован: 27 апр 2006, 09:32

Сообщение victor3000 » 18 дек 2006, 19:21

и все же какое решение?

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 18 дек 2006, 19:25

Элементарное - ограничивать выборки через кляузу where, а не тягать на клиента всю базу пока он не треснет.

victor3000
Сообщения: 98
Зарегистрирован: 27 апр 2006, 09:32

Сообщение victor3000 » 18 дек 2006, 19:36

выборки минимальны от 5 до 10, просто за сутки их очень много и приходит финиш по какой-то причине(out of memory у клиента хотя свободной памяти просто завались) вся причина в tibquery то ли он не видит что оперативки просто завались то ли черт его знает что за бага в нем, в инете масса топиков на эту тему. и решение всегда предлагается либо unifirectional=true либо вообще уйти с этого компонента например на tibsql на котором как народ проверил эта проблема сразу исчезает. но уйти нет возможности прога нереально большая, переписать год уйдет. вот и ищу решение, вразумительного ответа нет нигде к сожалению.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 18 дек 2006, 20:09

Я бы советовал таки меньше слушать разный трёп по инету, а больше думать головом. TIBQuery кеширует всё, что начитал, именно для того, чтобы позволить обратный скроллинг. До момента Close, когда всё и освобождает. А UniDirectional как раз и значит - ОдноНаправленный. Режим используется главным образом в скрытых от ползателя циклах типа "пробежаться по выборке от начала до конца и всё проапдейтить по хитрым условиям или залить в другую таблицу, типа датапампа" или когда TIBQuery используется в качестве источника данных для другого кеширующего компонента, например TClientDataSet - механизмы MIDAS устроены так, что при открытии сами открывают источник, вытягивают всё в ClientDataSet и источник закрывают, то есть при UniDirectional False в момент закачки получится никому не нужный двойной расход памяти. Если же у тебя курсоры короткие, и не открываются сотнями тыщ без закрытия, то ты не там ищешь. У тебя утечка памяти, в твоём собственном коде, а не перерасход. И out of memory у клиента быть не может, если у него этой мемори завались.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 18 дек 2006, 20:31

на котором как народ проверил эта проблема сразу исчезает.
добавлю к словам Merlin-а, что неплохо-бы взять новое приложение, влепить туда "проблемный ibquery с гридом", и пооткрывать-закрывать это в автоматическом режиме примерно миллион раз. И посмотреть, сколько такое приложение сожрет. И сравнить с частотой вызовов в реальной работе. И т.п. А не слушать, какой народ и чего там проверял. Сам же видишь - "вразумительного" ответа нигде нет.

Чудится мне, что проблема не в ibquery, о которой бы тут все только и говорили, а в мощных утечках памяти в коде приложения.

victor3000
Сообщения: 98
Зарегистрирован: 27 апр 2006, 09:32

Сообщение victor3000 » 18 дек 2006, 23:30

я так понимаю что если есть утечки памяти в коде в компоненте и так далее неважно где, мы приходим к тому что память сьедаеться и получаем out of memory. но ЕСТЬ свободная память ЕСТЬ ну как же еще это написать, ну простым диспетчером задач смотрю и вижу 1.5Gb свободной. или я как-то в проге должен указать что вот бери память сколько те надо не стесняйся. я лично подозреваю что дело даже не в количестве выбранных записей 100 или 100000, а в том что кеш не очищается в принципе, и как бы я не пытался минимизировать выборку в течении какого-то времени опять будет out of memory.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 19 дек 2006, 00:05

откуда такая уверенность, что память сжирает IBQuery? Вопрос ведь именно в этом.
Почему-то у тучи людей, которые работают с IBX таких утечек памяти не наблюдается. Вы для себя хотя бы тестовый пример можете сделать, чтобы убедиться в источнике проблемы?

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 19 дек 2006, 09:55

kdv писал(а):Почему-то у тучи людей, которые работают с IBX таких утечек памяти не наблюдается.
+1

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 19 дек 2006, 10:42

victor3000 писал(а):я так понимаю что если есть утечки памяти в коде в компоненте и так далее неважно где, мы приходим к тому что память сьедаеться и получаем out of memory. но ЕСТЬ свободная память ЕСТЬ ну как же еще это написать, ну простым диспетчером задач смотрю и вижу 1.5Gb свободной. или я как-то в проге должен указать что вот бери память сколько те надо не стесняйся. я лично подозреваю что дело даже не в количестве выбранных записей 100 или 100000, а в том что кеш не очищается в принципе, и как бы я не пытался минимизировать выборку в течении какого-то времени опять будет out of memory.
Есть память физическая, а есть виртуальная. Нехватает второй.
Кто-то не умеет пользоваться VirtualAlloc \ VirtualFree

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 19 дек 2006, 11:20

Под специфические ресурсы системы, типа семафоров, рукояток и прочего, выделяется тоже ограниченная память, не связанная с твоими гигабайтами.
Твой пример (уже?) недоступен.

victor3000
Сообщения: 98
Зарегистрирован: 27 апр 2006, 09:32

Сообщение victor3000 » 19 дек 2006, 14:39

ок. я запутался совсем. есть какая-то память кроме физической она заканчивается. чесно говоря для меня это новость. я не умею пользоваться какими-то алоками и фри чего-то там(чесно говоря не понимаю зачем это нужно). ладно признаю я полный идиот так будьте же так любезны не говорить загадками а скажите конкретно что нужно сделать. а то фигня получается память физическая есть, а файрберд работает с какой-то другой памятью, не понятно лично для меня причине.
я абсолютно не против пускай он использует физическую и не пишет мне
out of memory при 1,5gb свободного ОЗУ, ах да еще 2Gb файл подкачки существует тоже кстати пустует.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 19 дек 2006, 15:00

Всерьез рассчитываешь, что кто-то будет за тебя копаться в твоей программе и отлаживать ее? FastMM, CodeGuard или любой другой тул слежения тебе в руки и вперед.

victor3000
Сообщения: 98
Зарегистрирован: 27 апр 2006, 09:32

Сообщение victor3000 » 19 дек 2006, 15:28

да что вы конечно не расчитываю, просто пофлудить пришел как и вы.

Ответить