C# 处理计数

本文关键字:处理 | 更新日期: 2024-11-07 13:35:41

我正在研究我的一个应用程序可能有内存泄漏的可能性,所以开始玩一些非常基本的代码示例。我最终得到的一个,随着时间的推移,手柄的数量开始大大增加(>3000)。这是一个非常简单的控制台应用程序,其代码如下:

public static void Main(string[] args)
{
    using (SqlConnection sqlConnection = new SqlConnection())
    {
    }
    Console.ReadLine();
}

取出 SqlConnection 调用会删除任何句柄增加,因此我假设它与连接池有关。但是,由于这在基本上进入等待输入之前只运行一次,为什么句柄计数会不断增加?

谢谢。

C# 处理计数

如果您在 .NET 4.0 上运行它,则可能是这种情况

https://connect.microsoft.com/VisualStudio/feedback/details/691725/sqlconnection-handle-leak-net-4-0

您会发现

大多数对象缓存由框架对象(例如创建的框架对象)组成,因此您可以访问配置文件和资源,而无需自己手动解析文件

IIRC 默认对象缓存约为 4000 个对象。

你必须记住,仅仅因为你只创建和处置一个对象并不意味着这就是框架工作所做的一切