【问题标题】:Slow in filling .NET DataSet from Oracle 9i从 Oracle 9i 填充 .NET 数据集缓慢
【发布时间】:2009-12-27 13:40:02
【问题描述】:

这是我朋友在电话里问的一个问题。他编写的 C# 3.5 程序正在从有 350,000 条记录的 Patient Master 表中填充数据集。它使用适用于 Oracle 的 Microsoft ADO.NET 驱动程序。 ExecuteQuery 方法需要 30 多秒来填充数据集。但是,相同的查询(获取大约 20K 条记录)在 Toad 中花费的时间不到 3 秒。他没有在程序中使用任何事务。它在用于搜索的列 (Name) 上有一个索引。

这些是我建议的一些替代方案:-

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

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

3) 使用 Ants 分析器查看您是否可以识别任何特定的 ADO.NET 行。

有没有人遇到过类似的问题,有什么方法可以解决这个问题。

谢谢, 查克。

【问题讨论】:

  • Toad 中的查询是获取所有行还是仅获取前 100 或 1000 行?
  • Toad 查询获取大约 2 万条记录。数据读取器也只需要几秒钟 - 数据集需要 30 秒。

标签: oracle c#-3.0 dataset performance


【解决方案1】:

您确实需要执行扩展的 SQL 跟踪来查看缓慢的原因。这是来自 Cary Millsap(方法 R 和以前的 Hotsos)的一篇论文,详细说明了这样做:

http://method-r.com/downloads/doc_details/10-for-developers-making-friends-with-the-oracle-database-cary-millsap

【讨论】:

    【解决方案2】:

    Toad 通常只会获取前 x 行(在我的设置中为 500)。所以仔细检查比较是否有效。

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

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

    【讨论】:

    • 数据库的东西在业务层 - 很抱歉给人的印象是它在 UI 层。我们得出的结论是,使用 DataSet / DataTable 有其自身的开销,这导致了这 30 秒的延迟。
    【解决方案3】:

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

    为了清楚起见,让他在问题中添加代码 sn-p。

    【讨论】:

    • 他只是在使用 DataAdaptor.Fill
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2017-07-25
    • 2013-12-26
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多