0

我试图了解用 C# 编写的应用程序中发生了什么。下面是从性能监视器拍摄的几张图片。蓝线是所有堆中的#Bytes。绿线是大对象堆大小。我启动应用程序并登录。应用程序保持空闲状态。第一张图片显示 LOH 因某种原因增加然后下降。一个图案很清晰。什么是造成这种行为的原因?

在此处输入图像描述

更多的。我通过 ODP.NET 使用 Oracle 数据库从 A(见下图)开始进行一些繁重的处理。之后,该应用程序再次保持空闲状态。LOH 不会下降。相反,它出于某种原因不断增加。请注意,应用程序处于空闲状态。它只是在我的桌面上打开。我什至没有与它互动。

在此处输入图像描述

内存不断增加(每张图像代表 1:15:00)。

在此处输入图像描述

超过 2 小时后,它突然减少,之后又开始增加/减少(见下文),如第一张图片所示。应用程序一直处于空闲状态。到底是怎么回事?是内存泄漏吗?我不这么认为。我们分析了该应用程序,但找不到任何东西。LOH 也在没有任何活动的情况下增加。没有与 Oracle 数据库的开放连接。ODP.NET 会是罪魁祸首吗?

在此处输入图像描述

4

1 回答 1

0

问题肯定是由于 ODP.NET。如果我禁用连接池,问题不会出现。对于每个连接,ODP.NET 似乎每隔 3 分钟创建 2 个线程(如图所示),ODP.NET 会进行一些内务处理,但由于某种原因分配了未立即释放的内存。

它很容易复制。只需创建一个简单的应用程序,当按下按钮时,将打开与 Oracle 数据库的连接并执行存储过程。您会注意到第一张图像的图案。其他图像的模式取决于应用程序创建的连接数。

于 2011-08-01T14:09:29.750 回答