在我收到“您尝试过 ODP.net 吗?”之前 答案,是的,我有并且现在正在使用它。
我正在将数据从 oracle 移动到 sql server(不重要),并且在 oracle 连接上使用数据读取器。较大的表正在爬行。有时糟糕到每秒 10 条记录。当我注意到性能问题时,我将源代码缩减为仅对整个表进行简单的 Reader.Read() 调用,因此没有其他任何东西会减慢它的速度。我已经尝试过 MS 和 Oracle ODP .net 客户端。我目前正在使用 11g Instant Client、win7 64bit 上的 64bit、8 gigs ram 和所有好东西。我在本地网络上使用过,目前在VPN上,性能基本相同。我已经调整了 Prefetch 大小,但没有结果。
我可以在 Oracle Sql DEveloper 工具中运行导出数据功能,并在同一台机器上,通过同一网络,以大约 100 倍的速度导出整个数据库的所有数据。
我可以将我的 .net 应用程序复制到 oracle 服务器并在其上运行相同的性能测试,不到一秒就完成了。
因此,不是网络本身变慢,也不是数据量(如 SqlDeveloper 导出所示),不是 .net 代码本身,也不是 oracle db(如在服务器上运行所示),所以它必须是在任何网络上使用的 Datareader 的某种组合。
是我的即时客户端安装吗?成熟的客户端性能更好吗?64位客户端搞砸了?真是不知所措。
更新:
从那以后,我运行相同的应用程序,编译为 32 位,并在安装了“完整”oracle 客户端(显然是 32 位版本)的 windows xp 虚拟 pc 实例上运行。即使虚拟机的性能有所降低,它的运行速度仍然快了近 10 倍。因此,Instant 客户端肯定存在某种问题,而我的猜测是 64 位 Instant Client。确认这一点的最后一个测试是在同一台机器上安装一个 32 位即时客户端并再次运行它。如果我能找到时间...