【发布时间】:2011-08-31 01:26:17
【问题描述】:
我有一个 DataReader...我使用 DataReader 的结果作为另一个 DataReader 的参数,该 DataReader 连接到具有存储过程类型的命令。它现在运行得很快,但我担心我的数据库何时充满信息。我怎样才能加快速度?谢谢
【问题讨论】:
-
创建一个测试数据库并用千兆字节的信息填充它。
标签: c# datareader
我有一个 DataReader...我使用 DataReader 的结果作为另一个 DataReader 的参数,该 DataReader 连接到具有存储过程类型的命令。它现在运行得很快,但我担心我的数据库何时充满信息。我怎样才能加快速度?谢谢
【问题讨论】:
标签: c# datareader
您的初始查询可能会加入到存储过程生成的结果中。
【讨论】:
基本上,您有 2 次数据库往返而不是 1 次。如果您经常调用它可能是一个性能问题并且结果很小并且您已经优化了查询和存储过程(所以相对于实际有用的工作而言,往返开销变得很大)。
基准测试,看看这个功能是否真的是一个瓶颈。如果是,您可以尝试在 SQL 级别“合并”这两个操作,以便它们可以一次性执行 server-size。
我不确定这是否与您的问题有关,但请记住(取决于您的 DBMS / ADO.NET 提供商),可能支持或可能不支持同一连接上的多个活动阅读器。您是否在打开第二个之前关闭了第一个 DbDataReader?如果不是,并且您碰巧切换到不同的 DBMS,则可能会有麻烦。如果我没记错的话,Oracle (ODP.NET) 和 DB2 支持多个阅读器,而 MS SQL Server 和 PostgreSQL (Npgsql) 不支持。
【讨论】:
Dispose 或 Close。从您提供的信息中我无法确定,但您可能需要考虑在数据库级别进行 JOIN,因此只需要一个阅读器。