【发布时间】:2015-03-10 10:21:50
【问题描述】:
我正在研究我的一个应用程序可能存在内存泄漏的可能性,因此开始使用一些非常基本的代码示例。我最终得到的一个,随着时间的推移,在句柄的数量(> 3000)方面开始大大增加。这是一个非常简单的控制台应用程序,代码如下:
public static void Main(string[] args)
{
using (SqlConnection sqlConnection = new SqlConnection())
{
}
Console.ReadLine();
}
取出 SqlConnection 调用会删除任何 Handle 增加,所以我假设它与连接池有关。但是由于它在基本上进入等待输入之前只运行一次,为什么 Handle 计数会不断增加?
谢谢。
【问题讨论】:
-
如何检查句柄数?
-
我使用任务管理器和进程资源管理器(sysinternals)。
-
a 内存泄漏是由于程序保留内存供自己使用并且在关闭时不释放,或者超过它自己的内存配额并写入被不同进程使用的块,操作系统应该阻止第二个,框架阻止第一个,所以除非你使用 Marshal 手动分配内存并且事后不清理内存泄漏不太可能是问题
标签: c#