使用 Oracle .NET 提供程序的 C# 服务变得越来越慢

标签 c# .net performance oracle

我有一个为 .NET 2.0 编写的 C# 服务,它使用 .NET 2.102.2.20 的 Oracle 数据访问提供程序。该服务运行多个线程并对 Oracle 9.2 数据库运行大量查询。我正在使用 NHibernate。

我看到的是,当它启动时运行速度很快,然后变得越来越慢。 CPU 使用率开始很低,然后不断上升。几分钟后它开始爬行并且 CPU 达到 100%。我查看了我的代码,但没有发现可以执行此操作的任何内容。 GC 中的时间百分比 < 5%。我已尝试改变 ODP.NET 参数但无济于事。

有人知道这是怎么回事吗?

更多细节: 线程是工作线程,需要一直保持运行。我没有失控的线程,它们正在做真正的工作。我已经对程序进行了概要分析,看起来它在 Oracle 提供程序中花费了大量时间,这是您所期望的,但为什么它会使用这么多 CPU?就好像它在旋转等待结果集或其他东西,但它不会立即发生,只会在一段时间后发生。

更新: 这可能与服务器上的 .NET CLR 有关。 执行大量字符串操作的多线程测试程序在这台机器上也显示出相同的行为,开始时很快,然后在 15 分钟的过程中减慢到大约 1/3 的速度。测试程序在另一台具有相同操作系统版本和相同(我们认为).NET CLR 版本的相同服务器上没有显示这种减速行为。

更新: 现在看起来这是服务器过热和热保护启动并降低 CPU 频率的问题。

更新: 服务器的固件更新解决了这个问题。我仍然认为这是一个过热问题,因为如果我停止运行该进程并让服务器“休息”一会儿,当我重新启动该进程时它会开始快速运行,但如果我终止该进程并立即重新启动该进程会开始运行缓慢。我的猜测是风扇的固件控制出现故障,因此 CPU 会升温并减速。如果我停止跑一会儿,它们就会冷却下来并再次快速跑,直到它们再次变热。

最佳答案

听起来您的线程没有终止并一直保持运行,或者您有一些严重的内存泄漏。如果没有更多信息,这可能是任何东西。

关于使用 Oracle .NET 提供程序的 C# 服务变得越来越慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/571007/

相关文章:

Java 字符与字符 : what about memory usage?

c# - VS 2013 : Add Existing Project does not physically copy files. 你是怎么做到的?

c# - Mono Mac 上的 ASP.net MVC Razor View

c# - 从 join 转换为对象

.net - .net使用ReceiveAsync检测断开连接

java - 在数组中多次存储相同的引用项,一次更改是否会影响所有引用项?

c# - SQL : Update a row and returning a column value with 1 query

c# - 通过 C# Windows 窗体程序连接 Raspberry PI 2 上的 MySql 数据库

c# - 密封类中的 protected 成员

android - 在移动和 wifi 连接上检查 android 网络速度的最简单方法是什么?