Сегодня я нашел свойство 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.