Производительность новой версии IBProvider возросла в 4,5 раза
В новой версии IBProvider устранена причина низкой производительности сборок IBProvider, откомпилированных в Visual Studio.
Теперь эти сборки начали работать в несколько раз быстрее как в однопоточных, так и в многопоточных приложениях.
Вы сами можете убедиться насколько новая версия IBProvider работает эффективнее предыдущих.
На картинке представлена диаграмма тестирования сборок в нашей тестовой системе:
* По оси X время, затраченное на тесты. Указано в секундах.
- Красный график — старая версия IBProvider v3.0.0.7798.
- Синий график — новая версия IBProvider v3.0.0.7866.
В таблице приведены результаты тестирования производительности в комплексном OLE DB тесте:
Старые версии IBProvider | Версия | Компилятор | Имя файла в дистрибутиве | Время работы в секундах |
---|---|---|---|---|
IBProvider 32 bit | v.3.0.0.7798 | BCB5 | _IBProvider_v3_i.dll | 118,7 сек. |
IBProvider 32 bit | VS2008 | _IBProvider_v3_vc9_i.dll | 439 сек. | |
IBProvider 64 bit | VS2008 | _IBProvider_v3_vc9_w64_i.dll | 377,9 сек. | |
Новые версии IBProvider | ||||
IBProvider 32 bit | v.3.0.0.7866 | BCB5 | _IBProvider_v3_i.dll | 115,4 сек. |
IBProvider 32 bit | VS2008 | _IBProvider_v3_vc9_i.dll | 99 сек. | |
IBProvider 64 bit Лидер | VS2008 | _IBProvider_v3_vc9_w64_i.dll | 85 сек. |
Описание тестовой системы:
Database Server: | Firebird 2.5.0.25784 SuperServer x64 (VS2008 SP1+). Local Protocol. |
OS version: | Windows Vista Ultimate x64 SP2+ |
Server: | Q6600/4GB DDR3/ICH9R RAID10 x4 WD RE3 1TB |
Test cases: | Исходные тексты тестов находятся в «TestCode\ActiveX\IBP\oledb_test» (Маска тестов — «cmd*») |
Исправлена ошибка, связанная с пулом запросов
В результате нагрузочного тестирования последней версии IBProvider 3.0.0.7866, была выявлена и исправлена ошибка, связанная с пулом запросов. Ошибка проявлялась, начиная с версии IBProvider 3.0.0.7575. Всем кто использует эту версию — рекомендуем обновиться.
Описание ошибки:
В некоторых особо запущенных случаях с производительностью сервера (использовалась отладочная сборка Firebird 2.5) IBProvider мог зависать при явном вызове ADODB.Connection.Close.
Новый компонент LCPI.IBP.Samples.RowCursor — более быстрая замена ADODB.Recordset
В дистрибутив IBProvider добавлен новый компонент «LCPI.IBP.Samples.RowCursor», который доступен как в откомпилированном виде, так и в качестве исходных кодов. Это упрощенный аналог компоненты ADODB.Recordset, но он предоставляет более быстрый доступ к данным за счет следующих функций:
- Вместо EOF/MoveNext, компонент предоставляет унифицированный метод Fetch.
- ADODB.Recordset при каждом обращении к Field.Value, делает запрос к OLE DB провайдеру и не кэширует полученные данные, а RowCursor может сразу загрузить данные всех полей записи и применяет кэширование.
- Оптимизирован вызов IDispatch::Invoke для основных методов. Это ускоряет работу скриптовых программ.
- Использует интерфейс IOpenRowset, который позволяет выполнять SQL-запросы через объект сессии, без создания команды. Данная возможность поддерживается только в IBProvider v3.
Особенности работы компонента:
- Совместим с ADODB. Использует ADODB.Connection для подключения к БД.
- Поддерживает всех типы данных, включая BLOB, массивы и бинарные типы.
- Пока реализован только однонаправленный доступ к данным.
Сравнительные тесты на VBScript (используется интерфейс IDispatch) показали что LCPI.IBP.Samples.RowCursor на некоторых операциях работает до 30% быстрее, чем ADODB.Recordset.
Исходный код компонента
Исходный код LCPI.IBP.Samples.RowCursor доступен в дистрибутиве IBProvider: (Samples\oledb\sample_com_object)
Примеры использования компонента
Примеры работы с компонентом вы найдете в тестовой системе IBProvider, которая является частью дистрибутива:
- TestCode\ActiveX\IBP\test_system\tests\test.ibps.row_cursor.01.vbs
- TestCode\ActiveX\IBP\test_system\tests\test.ibps.row_cursor.02.vbs
- TestCode\ActiveX\IBP\test_system\tests\test.ibps.row_cursor.03.vbs
- TestCode\ActiveX\IBP\test_system\prog\prog_perf__02_row_cursor.wsf
- TestCode\ActiveX\IBP\test_system\prog\prog_perf__03.wsf
Изменения в дистрибутиве
Теперь в состав дистрибутива IBProvider Professional входят 2 новые оптимизированные dll:
- _IBProvider_v1_vc9_i.dll (IBProvider v1);
- _IBProvider_v2_vc9_i.dll (IBProvider v2);
Для их сборки вместо Free Borland C++ compiler используется современный компилятор от Visual Studio 2008 SP1+. Они заменили файлы:
- _IBProvider.dll;
- _IBProvider_v2.dll;
В новый инсталлятор включены только оптимизированные сборки IBProvider v1 и IBProvider v2:
- _IBProvider_v1_vc9_i.dll, _IBProvider_v2_vc9_i.dll, (компилятор Visual Studio 2008 SP1+);
- _IBProvider_v1_vc9_w64_i.dll и _IBProvider_v2_vc9_w64_i.dll (компилятор Visual Studio 2008 SP1+); Регистрируются при установке на 64 битную платформу.
- _IBProvider_i.dll, _IBProvider_v2_i.dll (компилятор Free Borland C++ compiler); Регистрируются инсталлятором.