许多博客和网站都提到增加OracleDataReader的FetchSize,以便在获取大量数据(例如数千行)时提高性能。有一些记录在案的具有确切数字的实验,如:http://metekarar.blogspot.com/2013/04/performance-improvement-for-odpnet.html
尝试复制这些结果,我创建了一个非常相似的示例应用程序,它使用不同的提取大小来执行此类数据提取多次。奇怪的是,除非明确禁用连接池(例如在连接字符串中),否则FetchSize的增加/减少会停止产生任何影响。但是当池被禁用时,很明显FetchSize可以提高性能(记录越多,效果越大)。
这可能是特定版本的ODP.NET中的一个错误(我使用的是2.112.1.0),或者这是一种普遍奇怪的行为,实际上这消除了为每个查询优化FetchSize的可能性。
在命令或阅读器(而不是连接)上设置FetchSize时,连接池和FetchSize之间的逻辑链接是什么?我错过了什么吗?
答案 0 :(得分:0)
事实证明,这种意外行为仅限于以下条件: 1)SELECT语句完全相同 2)池是开启的 3)自整定开启
只有在第一次设置FetchSize的情况下,它才会以某种方式被ODP.NET缓存并尝试更改它不起作用。