А зачем? Тебе жмотно байтиков на препарированный хендл?
Или в этом есть какой-то тайный смысл?

Ты кажется не в курсе, что ФБ 1.5 после 15,000-20,000 аллокированых хэндлов просто не реагировал на внешние раздражители (точное число зависит от платформы). ФБ 2.0 скажет, что памяти не осталось.

Это если их не освобождать. Хотя тоже интересный вопрос - я им не
занимался, может птицеводы подскажут: если я навыделял себе хендлов на
запросы, а потом клиент ласты склеил - сервер так и будет их хранить?
(классик не в счет, он по идее тоже отвалится).

Наск. я в курсе - освободятся как только сервер заметит пропажу клиента. Хэндлы запросов привязаны к хэндлу соединения.

Мне другое не понятно - а чем isc_dsql_free плох?
Ну наверное, диме жалко - каждый раз выделять/освобождать память - она
ведь фрагментируется. А так - память как бы выделена, но может
использоваться повторно, если надо. Или нет?

Ну так это уже внутренние проблемы сервера/движка. Каким образом он этим управляет - выделяет 20,000 хэндлов в начале или же по мере поступления запросов - не должно интересировать клиента. Движок может даже решить игнорировать isc_dsql_free с параметром DSQL_drop преобразовав его в DSQL_free и использовать хэндл для чего-то другого.

В чем-то Дмитрий прав - если есть isc_dsql_prepare, то должен быть isc_dsql_unprepare - по аналогии с isc_dsql_allocate/free. Вопрос в том, что этот метод будет делать и зачем нам хэндл в unprepared состоянии, что с ним можно делать?

Роман

Ответить