.net - .Net 中 Oracle DataReader 的大性能问题

标签 .net database vb.net oracle datareader

我有一些 Oracle 程序生成/返回大量数据,我需要将这些数据写入文件。我目前正在尝试使用数据阅读器来完成。它似乎在工作,我已经成功地生成了一个 479mb 的文件,没有任何问题。从我检索 dataReader 到完成文件用了不到 4 分钟。

但是我为特定过程获取的 dataReader 正在爬行。它慢得令人难以置信。我修改了我的代码以尝试更好地了解正在发生的事情......

System.Diagnostics.Debug.Write("Performing .Read() on DataReader: ")
Dim d1 As DateTime = DateTime.Now
Dim result As Boolean = myDataReader.Read()
Dim ts As TimeSpan = DateTime.Now.Subtract(d1)
System.Diagnostics.Debug.WriteLine(ts.ToString)

有趣的是我的输出最终看起来像这样:

Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:00:00
Performing .Read() on DataReader: 00:07:33.5037500

我真的不知道下一步该怎么做。对于采用 07:33.5037500 的行,我看不到任何独特或不同之处。有什么建议吗?

编辑:

感谢大家的回复。首先,据我所知,没有抛出异常。正如所建议的那样,我已经查看了这个表现出上述行为的特定过程,而过程却非常庞大;但看起来它使用了很多游标来填充 oracle 临时表。返回的 Ref Cursor 是一个 SELECT * FROM 该临时表。

我正在编写一个 PL/SQL block ,它将打开该游标以查看在我删除 .Net 代码时是否存在性能问题....希望这会有所帮助;但如果您有任何其他想法,我们将不胜感激。

再次感谢。这看起来确实是一个 PL/SQL 问题,而不是 .NET 问题。

最佳答案

数据库实际上在做什么?

具有 GROUP BY 或 ORDER BY 的查询可能需要生成完整的结果集,然后在返回行之前对其进行排序/聚合。扫描大型表的查询可能会在前几个 block 中找到 50 行,然后在找到另一个 block 之前再读取十万个 block 。

我建议你忽略 VB 代码并发布数据库代码。

关于.net - .Net 中 Oracle DataReader 的大性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4141175/

相关文章:

c# - 检测 Windows Mobile 与 "plain"Windows CE

sql - INSERT statement conflict with the FOREIGN KEY constraint 冲突发生在数据库中

vb.net - 尝试 - 多线程 - 在 VB.net Windows 窗体中

vb.net - Resharper 的单元测试资源管理器是否适用于 VB.NET 测试项目?

c# - System.Net.Mail无法加载或初始化请求的服务提供者

.net - 为什么该对位于 System.Web.UI 中?

mysql - 如何在非常大的 MySQL 表上提高 INSERT 性能

vb.net - 如何创建 "dockable"表单?

c# - 从 WPF 应用程序显示 WinForm 对话框的性能问题

database - 为字典设计数据库