"Мадорский Г.В." ...

> Ты вроде как в свое время на медленных линиях собаку съел... :) Может
> вспомишь чего...

    Я не кореец, аднака, собак не ем :)


    Terminal Server попроще будет, потому его и посоветовал сходу :)
Ну, раз не хочешь попроще - лови посложнее :)

    Самое простое, что можно сделать с IBX, по-памяти

а) убрать никому не нужный isc_dsql_set_cursor_name

б) сделать хендлы запросов повторно используемыми, т.е.
   не вызывать isc_dsql_free_statement(..., DSQL_drop), а засовывать хендл
   за щёку. Вынимать из-за щеки когда оно зовёт isc_dsql_allocate_statement.

в) в TIBSQL.GetRowsAffected сделать буфер правильного р-ра (32 байта),
   а не 1048 (откуда он взял это число ???). Или ваще похерить этот
   вызов, если конечно можешь без него обойтись.

г) в TIBSQL.Prepare заменить

        if FSQLType in [SQLSelect, SQLSelectForUpdate,
                        SQLExecProcedure] then
        begin
          { Allocate an initial output descriptor (with one column) }
-         FSQLRecord.Count := 1;
+         if FSQLRecord.FSize = 0
+         then FSQLRecord.Count := 1; // тут можно любое число > 0
          { Using isc_dsql_describe, get the right size for the columns... }
          Call(FGDSLibrary.isc_dsql_describe(StatusVector, @FHandle,
Database.SQLDialect, FSQLRecord.FXSQLDA), True);
          if FSQLRecord.FXSQLDA^.sqld > FSQLRecord.FXSQLDA^.sqln then
          begin
-           FSQLRecord.Count := FSQLRecord.FXSQLDA^.sqld;
            Call(FGDSLibrary.isc_dsql_describe(StatusVector, @FHandle,
Database.SQLDialect, FSQLRecord.FXSQLDA), True);
          end
-         else
-           if FSQLRecord.FXSQLDA^.sqld = 0 then
-             FSQLRecord.Count := 0;
+         FSQLRecord.Count := FSQLRecord.FXSQLDA^.sqld;

    Это я сам не пробовал, но должно работать.
    Суть - не вызывать isc_dsql_describe второй раз, если у нас
    и так хватает дескрипторов (XSQLDA) для резалтсета

д) Выключить trace флаги у TIBDatabase и\или выключить запрос плана в
TIBSQLMonitorHook.SQLPrepare


-- 
Хорсун Влад

PS Можно так же пользовать FB 2.1 в котором часть вышенаписанного уже есть
   плюс кое-что ещё :)

PPS эээх, столько "секретов" выдал :)


Ответить