2009-05-17 82 views
4

我正在閱讀有關.net中的連接池,我不確定是否正確。他們說,關閉的連接返回到池中,以便以後可以重新使用。但是與之相關的是什麼?它是數據庫還是隻是應用程序環境(在其上執行的計算機)?如果它是後者,那麼如果你有兩個用戶在兩臺不同的計算機上打開他們的應用程序並且一個接一個地請求相同的連接,那麼連接池並沒有什麼不同,我說得對嗎?什麼是連接池關聯?

編輯:當然,我知道如果同一個應用程序再次打開同一個連接,它會有所作爲,但同一個應用程序的兩個不同實例呢?

回答

3

連接池僅限於客戶端PC,並與連接字符串和認證詳細信息相關聯。

因此,如果一個連接關閉並返回到池中,它將僅在連接字符串和認證細節完全匹配時纔會重用。

2

連接池只是客戶端上的一個集合,當您第一次嘗試打開到數據庫的連接時,該連接池會充滿連接。如果完成了連接對象的處理,則不會處理它,而是返回到可用連接的集合。

這樣你可以提高性能,因爲打開和關閉數據庫連接可能非常昂貴(考慮建立連接所需的網絡流量)。

這是關於這一主題的良好啓動教程:

http://www.eggheadcafe.com/tutorials/aspnet/df2b05d8-93ea-49e1-aeaa-d116a4d6ac3b/adonet-connection-poolin.aspx

1

的ConnectionPoolCollection實際上是一個單獨的對象持有連接池對象。

您可以通過反射DbConnection上的靜態函數來測試此操作,以清除單個池或清除所有池。

ClearAllPools - 清除SQL Server中DbConnection的所有池。

由於對象是單例,它不能跨越進程邊界工作。每個流程最終都會有一個池。

有一些ADO.NET提供程序可以通過使用COM對象來存放應用程序進程以保存實例參考,但大多數不這樣做。