使用ODP.NET缓慢的Datareader

时间:2013-01-16 06:03:29

标签: odp.net

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

1 个答案:

答案 0 :(得分:0)

尝试设置FetchSize。

由于这是一个Procedure和一个RefCusor,您可以执行这些操作。

  • ExecuteReader
  • 设置FetchSize - >在开始阅读之前这样做
  • 阅读结果

如果您按照上述步骤操作,您将能够获得一行的大小。

e.g。

int NumberOfRowsToFetchPerRoundTrip = 2000;

var reader  =cmd.ExecuteReader();
reader.FetchSize = reader.RowSize * NumberOfRowsToFetchPerRoundTrip;
while(reader.Read())
{
//Do something
}

这将减少往返次数。获取大小是字节,因此您也可以使用任意fetchSize,例如1024 * 1024(1mb)。但是,我建议您根据行的大小*获取每个请求要获取的行数。

另外我会在连接字符串

上设置参数

Enlist = false; Self Tuning = False

您似乎可以通过这些设置获得更一致的性能,尽管从一个版本的ODP / NET到下一个版本可能会有一些差异。