2022年5月3日 星期二

[研究][ASP.NET]SQL Server 連線數量測試(四)Close、Dispose、ClearPool 與 ClearAllPools

[研究][ASP.NET]SQL Server 連線數量測試(四)Close、Dispose、ClearPool 與 ClearAllPools

2022-05-03

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019

********************************************************************************

SQL Server Management Studio 上執行

SELECT c.session_id, c.connect_time, s.login_time, 
    c.client_net_address, s.login_name, s.status
FROM sys.dm_exec_connections c 
left join sys.dm_exec_sessions s 
on c.session_id = s.session_id
WHERE login_name='testuser';

Default.aspx.cs

using System;
using System.Data.SqlClient;
using System.Web.Configuration;

namespace WebApplication1
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string queryString = @"SELECT * FROM [Table1];";
            using (SqlConnection connection = new SqlConnection(
                WebConfigurationManager.ConnectionStrings["TestDBConnectionString"].ConnectionString))
            {
                SqlCommand command = new SqlCommand(queryString, connection);
                connection.Open();
                command.ExecuteNonQuery();

            }
        }
    }
}


********************************************************************************

Default.aspx.cs

using System;
using System.Data.SqlClient;
using System.Web.Configuration;

namespace WebApplication1
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string queryString = @"SELECT * FROM [Table1];";
            using (SqlConnection connection = new SqlConnection(
                WebConfigurationManager.ConnectionStrings["TestDBConnectionString"].ConnectionString))
            {
                SqlCommand command = new SqlCommand(queryString, connection);
                connection.Open();
                command.ExecuteNonQuery();
                connection.Close();
                
            }
        }
    }
}

(下圖) 因為在 Visual Studio 中測試,程式停掉後再執行,所以原來連線不在,重新建立了一個新的;Close() 指令似乎不會立刻刪除掉 連線池 

********************************************************************************

Default.aspx.cs

using System;
using System.Data.SqlClient;
using System.Web.Configuration;

namespace WebApplication1
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string queryString = @"SELECT * FROM [Table1];";
            using (SqlConnection connection = new SqlConnection(
                WebConfigurationManager.ConnectionStrings["TestDBConnectionString"].ConnectionString))
            {
                SqlCommand command = new SqlCommand(queryString, connection);
                connection.Open();
                command.ExecuteNonQuery();
                connection.Close();
                connection.Dispose();
                //SqlConnection.ClearPool(connection);
                //SqlConnection.ClearAllPools();
            }
        }
    }
}

(下圖) 因為在 Visual Studio 中測試,程式停掉後再執行,所以原來連線不在,重新建立了一個新的;Dispose() 指令似乎不會立刻刪除掉 連線池 

********************************************************************************

Default.aspx.cs

using System;
using System.Data.SqlClient;
using System.Web.Configuration;

namespace WebApplication1
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string queryString = @"SELECT * FROM [Table1];";
            using (SqlConnection connection = new SqlConnection(
                WebConfigurationManager.ConnectionStrings["TestDBConnectionString"].ConnectionString))
            {
                SqlCommand command = new SqlCommand(queryString, connection);
                connection.Open();
                command.ExecuteNonQuery();
                connection.Close();
                connection.Dispose();
                SqlConnection.ClearPool(connection);
                //SqlConnection.ClearAllPools();
            }
        }
    }
}

(下圖) 因為在 Visual Studio 中測試,程式停掉後再執行,所以原來連線不在,重新建立了一個新的;ClearPool() 指令似乎不會立刻刪除掉 連線池 



********************************************************************************

Default.aspx.cs

using System;
using System.Data.SqlClient;
using System.Web.Configuration;

namespace WebApplication1
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string queryString = @"SELECT * FROM [Table1];";
            using (SqlConnection connection = new SqlConnection(
                WebConfigurationManager.ConnectionStrings["TestDBConnectionString"].ConnectionString))
            {
                SqlCommand command = new SqlCommand(queryString, connection);
                connection.Open();
                command.ExecuteNonQuery();
                connection.Close();
                connection.Dispose();
                SqlConnection.ClearPool(connection);
                SqlConnection.ClearAllPools();
            }
        }
    }
}

(下圖) 因為在 Visual Studio 中測試,程式停掉後再執行,所以原來連線不在,重新建立了一個新的;ClearAllPools() 指令會立刻刪除掉 連線池 。


********************************************************************************

SqlConnection.Close 方法 (System.Data.SqlClient) | Microsoft Docs
關閉與資料庫的連接。 這是關閉任何開啟連接的慣用方法。
方法 Close 會回復(rolls back)任何擱置的交易。 然後,它會釋放連線集區的連線,或停用連線共用時關閉連線。

********************************************************************************
(完)

相關

[研究][ASP.NET]SQL Server 連線數量測試(四)Close、Dispose、ClearPool 與 ClearAllPools
https://shaurong.blogspot.com/2022/05/aspnetsql-server-closedisposeclearpool.html

[研究][ASP.NET]SQL Server 連線數量測試(三)連線歸屬測試
https://shaurong.blogspot.com/2022/05/aspnetsql-server_44.html

[研究][ASP.NET]SQL Server 資料庫連線數量測試(二)資料庫中儲存的連線資訊https://shaurong.blogspot.com/2022/05/aspnetsql-server_3.html

[研究][ASP.NET]SQL Server 連線數量測試(一)程式與資料庫連線數量https://shaurong.blogspot.com/2022/05/aspnetsql-server.html



沒有留言:

張貼留言