我们正在使用(ODP.NET)Oracle.DataAccess版本1.102.3.0和Oracle 11g客户端。我在使用datareader读取数据时遇到一些问题, 我的过程返回一个大约10000条记录的ref_cursor。但是,获取数据大约需要30到40秒。 有没有可能改善性能?
答案 0 :(得分:0)
尝试设置FetchSize。
由于这是一个Procedure和一个RefCusor,您可以执行这些操作。
如果您按照上述步骤操作,您将能够获得一行的大小。
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到下一个版本可能会有一些差异。