0

我们正在使用 (ODP.NET) Oracle.DataAccess 版本 1.102.3.0 和 Oracle 11g 客户端。我在使用 datareader 读取数据时遇到了一些问题,我的程序返回了大约 10000 条记录的 ref_cursor。然而,获取数据大约需要 30 到 40 秒。有没有可能提高性能?

4

1 回答 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 回答