我们正在使用 (ODP.NET) Oracle.DataAccess 版本 1.102.3.0 和 Oracle 11g 客户端。我在使用 datareader 读取数据时遇到了一些问题,我的程序返回了大约 10000 条记录的 ref_cursor。然而,获取数据大约需要 30 到 40 秒。有没有可能提高性能?
问问题
1524 次
1 回答
0
尝试设置 FetchSize。
由于这是一个过程和一个 RefCusor,您可以执行这些操作。
- 执行阅读器
- 设置 FetchSize -> 在开始阅读之前执行此操作
- 阅读结果
如果您遵循上述操作顺序,您将能够获得行的大小。
例如
int NumberOfRowsToFetchPerRoundTrip = 2000;
var reader =cmd.ExecuteReader();
reader.FetchSize = reader.RowSize * NumberOfRowsToFetchPerRoundTrip;
while(reader.Read())
{
//Do something
}
这将减少往返次数。提取大小是字节,因此您也可以使用任意 fetchSize,例如 1024*1024 (1mb)。但是,我建议您根据行的大小 * 每个请求要获取的行数来获取。
另外我会在连接字符串上设置参数
Enlist=false;自整定=False
尽管从一个版本的 ODP/NET 到下一个版本可能会有一些变化,但您似乎可以通过这些设置获得更一致的性能。
于 2013-01-23T12:40:23.143 回答