【问题标题】:Is there some way to get count of How many connections are used from Pool有什么方法可以计算从池中使用了多少连接
【发布时间】:2012-03-30 09:55:36
【问题描述】:

我想写这样的东西,

在我的单元测试中,我想知道是否存在连接泄漏? 所以我想从之前的池连接中获取使用的计数,并在它应该相等之后得到,测试是 STA,所以它必须工作

所以,问题在这个标题中

【问题讨论】:

  • 它有一个性能计数器,你可以用 Perfmon.exe 看到它。类别 =“.NET CLR 数据”,计数器 =“SqlClient:当前 # 池连接”。 Instance 应该是您的测试运行器。使用 WMI 或 PerformanceCounter 读取它。

标签: .net connection-pooling


【解决方案1】:

我不知道这是否是您正在寻找的,但请尝试一下。

SELECT COUNT(*) AS Number_Of_Connections FROM sys.dm_exec_sessions WHERE program_name='your connection str application name'

或根据数据库名称计数

SELECT DB_NAME(dbid) as 'DbNAme', COUNT(dbid) as 'Connections' from master.dbo.sysprocesses with (nolock) WHERE dbid > 0 GROUP BY dbid

【讨论】:

  • 在这种情况下,OP 指的是特定的 .NET CLR 计数器。
【解决方案2】:

您应该能够执行以下示例控制台应用程序:

    static void Main(string[] args)
    {
        using (SqlConnection conn = new SqlConnection(@"SAMPLE_CONNECTIONSTRING"))
        {
            conn.Open();
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.Connection = conn;
                cmd.CommandText = "SELECT * FROM SAMPLE_TABLE";
                SqlDataReader dr = cmd.ExecuteReader();

                //Used to show that values update based on connections in use.
                //dr.Dispose();
                //cmd.Dispose();
                //conn.Dispose();

                //create our WMI searcher
                ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_PerfRawData_NETDataProviderforSqlServer_NETDataProviderforSqlServer");
                //now loop through all the item found with the query
                foreach (ManagementObject obj in searcher.Get())
                {
                    try
                    {
                        Console.WriteLine("Class Win32_PerfRawData_NETDataProviderforSqlServer_NETDataProviderforSqlServer");
                        Console.WriteLine(obj.Properties["Name"].Value);

                        Console.WriteLine("Connection Pools " + obj.Properties["NumberOfActiveConnectionPools"].Value);
                        Console.WriteLine("Pooled Connections " + obj.Properties["NumberOfPooledConnections"].Value);
                        Console.WriteLine("Active Connections " + obj.Properties["NumberOfActiveConnections"].Value);
                        Console.WriteLine("Free Connections " + obj.Properties["NumberOfFreeConnections"].Value);
                    }
                    catch (Exception ex)
                    {
                        //throw new Exception("Failed to enumerate a WMI command.", ex);
                    }
                }
            }
        }
        Console.ReadLine();
    }

VB Code Sample that got me the correct Win32 class.

【讨论】:

    猜你喜欢
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    相关资源
    最近更新 更多