我正在调查我的某个应用程序可能存在内存泄漏的可能性,因此开始使用一些非常基本的代码示例。我最终得到的一个是,随着时间的推移,在手柄数量(> 3000)方面开始大幅增加。这是一个非常简单的控制台应用程序,代码如下:
public static void Main(string[] args)
{
using (SqlConnection sqlConnection = new SqlConnection())
{
}
Console.ReadLine();
}
取出SqlConnection调用会删除任何Handle增加,所以我假设它与连接池有关。但由于这只在基本进入等待输入之前只运行一次,为什么Handle计数会继续增加?
感谢。
答案 0 :(得分:4)
如果您在.NET 4.0上运行它,可能就是这种情况
https://connect.microsoft.com/VisualStudio/feedback/details/691725/sqlconnection-handle-leak-net-4-0
答案 1 :(得分:0)
您会发现大多数对象缓存都是由框架对象组成的,例如那些创建的对象,因此您可以访问配置文件和资源而无需自己手动解析文件
IIRC默认对象缓存大约是4000个对象。
你必须记住,仅仅因为你创建和处理单个对象并不代表所有框架工作正在进行