InitialLOBFetchSize из -1 заставляет IsDBNull пустого CLOB возвращать true - PullRequest
1 голос
/ 25 января 2012

Сегодня я нашел свойство OracleCommand.InitialLOBFetchSize ( документация ).Поскольку я использую NHibernate (который всегда получает доступ ко всем значениям, возвращаемым из DataReader), я установил его на -1 для всех новых OracleCommands в моем приложении (что принесло огромный выигрыш в производительности при выборе многих CLOB).

Но потом я заметил несколько новых ошибок в моем приложении.Все они имеют один и тот же источник: внезапно OracleDataReader.IsDBNull() ( документация ) возвращает true для пустых объектов CLOB!Это воспроизводимо на 100%, если установить значение 0 или положительное значение, IsDBNull() вернется к своему правильному поведению.

Кто-нибудь знает, как можно предотвратить эту ошибку, продолжая получать полные большие объекты без дополнительных циклических операций?срабатывает?

Я заметил, что установка положительного значения InitialLOBFetchSize влияет на значение OracleDataReader.RowSize, тогда как 0 и -1 приводят к одному и тому же значению RowSize.Есть ли какой-либо недостаток в установке InitialLOBFetchSize на большое значение (несколько МБ)?

Я использую ODP.NET 11.2.0.3.0 (также пробовал 11.2.0.2.0) с .NET 4.0 исервер Oracle 11g Release 2.

1 Ответ

1 голос
/ 31 января 2012

Некоторое тестирование показало, что использование больших значений (> = 1 МБ) для InitialLOBFetchSize снижает производительность (до 0).

Я буду использовать значение, которое охватывает большинство моих CLOB(5-10 КБ), пока у кого-то не появится реальное решение.

...