繁体   English   中英

C# Windows 表单应用程序中奇怪的 memory 使用模式

[英]Strange memory usage pattern in C# Windows Form app

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM