Connection Pooling之SqlDataReader.Close()測試

早上貼了OracleConnection Pooling觀察文後,引發另一個疑問:

那麼沒呼叫SqlDataReader.Close()也會有相同問題嗎?

程式經過修改,就做出了SQL版:

public static void ShowSessionCount(string tag)
{
    using (SqlConnection cn = new SqlConnection(cnStrMonitor))
    {
        cn.Open();
        SqlCommand cmd = new SqlCommand(@"
select count(*) as c 
from sys.sysprocesses where loginame = 'testCnnUser'",
            cn);
        SqlDataReader dr = cmd.ExecuteReader();
        dr.Read();
        Console.WriteLine("[{1}] Session Count={0}", dr["c"], tag);
        dr.Close();
        cn.Close();
    }
}
 
public static void TestConnPool()
{
    using (SqlConnection cn = new SqlConnection(cnStrTester))
    {
        ShowSessionCount("Before Open");
        cn.Open();
        ShowSessionCount("After Open");
        SqlCommand cmd = new SqlCommand(
            "select getdate()", cn);
        SqlDataReader dr = cmd.ExecuteReader();
        dr.Read();
        Console.WriteLine(dr[0]);
        //dr.Close();
        SqlConnection.ClearPool(cn);
        ShowSessionCount("Before Close");
        cn.Close();
        ShowSessionCount("After Close");
    }
    ShowSessionCount("After Using");
    SqlConnection.ClearAllPools();
    ShowSessionCount("After ClearAllPools");
}

用我的工作機Windows 2008 + VS 2008 + SQL 2008進行測試,發現SqlDataReader.Close()不影響Connection的釋放。

[Before Open] Session Count=0
[After Open] Session Count=1
2009/08/12 上午 09:22:16
[Before Close] Session Count=1
[After Close] Session Count=0
[After Using] Session Count=0
[After ClearAllPools] Session Count=0

不過,DataReader用完就Close()絕對是好習慣,不要過度依賴系統的防呆機制,肯定是良好的開發態度。

如果有人有其他平台的測試結果,歡迎留言跟大家分享。

歡迎推文分享:
Published 12 August 2009 12:37 PM 由 Jeffrey
Filed under: ,
Views: 9,656



意見

# 小賤健 said on 11 August, 2009 08:10 PM

Win 2K3 + VS 2K5 + SQL 2K5 結果也一樣。

其實這問題,很久之前我已經有測試過了,得到的答案與黑大一樣。不過也因為知道 DataReader 與 Connection 是共生,所以很多時候都是在偷懶狀態,多數情況下只有釋放 Conntection 而不做 DataReader.Close() 的:P

嗯...我還是來去重新檢查一番好了^^"

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<August 2009>
SunMonTueWedThuFriSat
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication