Дата публикации: 16.11.2009

Производительность новой версии IBProvider возросла в 4,5 раза

В новой версии IBProvider устранена причина низкой производительности сборок IBProvider, откомпилированных в Visual Studio.

Теперь эти сборки начали работать в несколько раз быстрее как в однопоточных, так и в многопоточных приложениях.

По результатам тестирования,
новая версия IBProvider Professional v3 теперь
работает в 4.5 раза быстрее своих предшественников.


Вы сами можете убедиться насколько новая версия 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:

  1. _IBProvider_v1_vc9_i.dll, _IBProvider_v2_vc9_i.dll, (компилятор Visual Studio 2008 SP1+);
  2. _IBProvider_v1_vc9_w64_i.dll и _IBProvider_v2_vc9_w64_i.dll (компилятор Visual Studio 2008 SP1+); Регистрируются при установке на 64 битную платформу.
  3. _IBProvider_i.dll, _IBProvider_v2_i.dll (компилятор Free Borland C++ compiler); Регистрируются инсталлятором.

Дата публикации: 16.11.2009. Права на материал принадлежат: IBProvider. При перепечатке ссылка на сайт https://www.ibprovider.com/rus обязательна.