从Oracle 9i填充.NET数据集速度慢

从Oracle 9i填充.NET数据集速度慢,oracle,c#-3.0,dataset,performance,Oracle,C# 3.0,Dataset,Performance,这是我朋友在电话里问的问题。他编写的C#3.5程序正在从一个拥有350000条记录的患者主表中填充数据集。它使用用于Oracle的Microsoft ADO.NET驱动程序。ExecuteQuery方法填充数据集的时间超过30秒。然而,同样的查询(获取大约20K条记录)在Toad中只需不到3秒钟。他没有在程序中使用任何事务。它在用于搜索的列(名称)上有一个索引 以下是我建议的一些备选方案:- 1) 尝试使用数据读取器,然后填充数据表并将其传递给表单以将其绑定到组合框(这不是一个好主意,因为可能需

这是我朋友在电话里问的问题。他编写的C#3.5程序正在从一个拥有350000条记录的患者主表中填充数据集。它使用用于Oracle的Microsoft ADO.NET驱动程序。ExecuteQuery方法填充数据集的时间超过30秒。然而,同样的查询(获取大约20K条记录)在Toad中只需不到3秒钟。他没有在程序中使用任何事务。它在用于搜索的列(名称)上有一个索引

以下是我建议的一些备选方案:-

1) 尝试使用数据读取器,然后填充数据表并将其传递给表单以将其绑定到组合框(这不是一个好主意,因为可能需要相同的时间)

2) 尝试Oracles的ADO.NET驱动程序

3) 使用Ants profiler查看是否可以识别任何特定的ADO.NET行

有没有人遇到过类似的问题?有哪些解决方法

谢谢,
Chak.

如果不知道他用来完成任务的实际代码,也不知道他实际获取的行数(我希望他不会全部读取350K行?),就不可能说出任何对他有帮助的话


为了清楚起见,让他在问题中添加一个代码片段。

蟾蜍通常只提取前x行(在我的设置中为500行)。因此,请仔细检查比较是否有效

然后,如果可能的话,您应该尝试将db内容与表单内容分开,以查看db是否占用了时间


如果是这种情况,请尝试Oracle库如果速度更快,我们已经看到最新的Oracle驱动程序和标准的Microsoft驱动程序之间有50%的改进

您确实需要执行扩展的SQL跟踪,以查看速度缓慢的原因。以下是Cary Millsap(方法R的作者,以前是Hotsos的作者)的一篇论文,详细介绍了这一点:


蟾蜍中的查询是获取所有行还是仅获取前100或1000行?蟾蜍查询获取约20 K条记录。Data Reader也只需要几秒钟—数据集只需要30秒。他只是在使用一个DataAdapter.Fill数据库在业务层—很抱歉给人的印象是它在UI层。我们得出的结论是,使用DataSet/DataTable有其自身的开销,这导致了30秒的延迟。