2012-01-25 19 views
1

今天我找到了OracleCommand.InitialLOBFetchSize屬性(documentation)。因爲我使用的是NHibernate(它總是訪問從DataReader返回的所有值),所以我在我的應用程序中將所有新的OracleCommands設置爲-1(這在選擇多個CLOB時帶來了巨大的性能提升)。InitialLOBFetchSize爲-1會導致空CLOB的IsDBNull返回true

但後來我注意到我的應用程序中有幾個新bug。它們都具有相同的源:突然OracleDataReader.IsDBNull()documentation)對空CLOB返回true!這是100%重現性,將其設置回0或正值會使IsDBNull()恢復正確的行爲。

有沒有人有一個想法,如何可以防止這個bug,同時仍然完成LOBs沒有額外的往返?

我注意到將InitialLOBFetchSize設置爲正值會影響OracleDataReader.RowSize值,而0和-1會導致相同的RowSize值。將InitialLOBFetchSize設置爲很大的值(MB)有什麼不利嗎?

我在.NET 4.0和Oracle 11g Release 2服務器上使用ODP.NET 11.2.0.3.0(也試過11.2.0.2.0)。

+0

提示:這個問題有一個正式的Oracle錯誤條目。錯誤ID是14279177. – cremor

+0

我也碰到過。 –

回答

1

一些測試表明,對InitialLOBFetchSize使用大值(> = 1 MB)會使性能回落(與0一樣差)。

我將使用一個覆蓋大部分CLOB(5-10 KB)的值,直到有人有真正的解決方案。

相關問題