Query сжирает всю память
table состоит из ID integer
NAME1 varchar(4096)
NAME2 varchar(2048)
в ней 10 записей.
После открытия Query Диспетчер задачь регистрирует выделение общей памяти объемом 6 метров. После закрытия Query - эти 6 метров освобождаются. В "процессах" процесс с Query сжирает всего несколько килобайт. Может ли Query сжирать столько памяти, и как этого избежать? В программе используется с десяток таких запросов, поэтому каждому п 6 метров- просто неприемлимо.
Конфигурация:
Delphi 5, SP1, SP2, IBX5.04
TIBQuery
В программе используется с десяток таких запросов, поэтому каждому п 6 метров- просто неприемлимо.
Ответ прост: ни один уважающий себя программист не будет давать запросы вида "select * from table" без WHERE. Это сродни программированию на Clipper'е, а потому - моветон.
Ответ прост: ни один уважающий себя программист не будет давать запросы вида "select * from table" без WHERE. Это сродни программированию на Clipper'е, а потому - моветон.
Ой! Точно! Как я не догадался! Конечно!
Надо поставить всемогущий WHERE и у меня все заработает!! И ошибки исчезнут, и заказчики деньги сразу заплатят.
А если серьезно - то я привел шаблонный текст запроса (это означает, что текст запроса - просто пример ;) ).
Вопрос был совершенно другой. Прочти внимательнее.
Вопрос был совершенно другой. Прочти внимательнее.
Согласен, 6 метров для десяти записей - это слишком. Тут уже надо думать.
Вопрос первый - последняя версия IB(X) стоит? Я не помню номер версии, которая поставлялась с Дельфи, но она работала просто страшно.
Потом, создается впечатление, что память отводится либо под строки, которых нет, либо под кэш? Проверь настройки IBSession (или как оно там называется).
И, наконец, если данные не должны отображаться в гриде, а обрабатываются по одной записи или в пакетном режиме, можно попробовать выставить параметр UniDirectional.
Блин, как давно это было...
Кстати, не помню где, но был косяк с Lookup-полями. Они не только жрали память, но и тормозили безбожно.
Delphi 5 SP1, SP2 IBX 5.04 - все последнее
Использую строковые calculated поля типа IBString.
В них хранятся дешифрованные значения оригинальных полей. IBSession не использую.
Это мысль :)
Кстати, не помню где, но был косяк с Lookup-полями. Они не только жрали память, но и тормозили безбожно.
Этого тоже нету :)