六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

連接池的管理

[摘要]連接池的管理:對于訪問量高的系統,每次創建一個連接都會消耗一定的資源,我們可以事先創建好一定數量的連接放入連接池中提供給用戶使用,用戶使用完后把連接返回連接池,這里我就來說說連接池的管理。首先,讓我...
連接池的管理:
對于訪問量高的系統,每次創建一個連接都會消耗一定的資源,我們可以事先創建好一定數量的連接放入連接池中提供給用戶使用,用戶使用完后把連接返回連接池,這里我就來說說連接池的管理。

首先,讓我們來看看連接池的概念:
1。連接池允許應用程序從連接池中獲得一個連接并使用這個連接,而不需要為每一個連接請求重新建立一個連接。一旦一個新的連接被創建并且放置在連接池中,應用程序就可以重復使用這個連接而不必實施整個數據庫連接創建過程。
2。當應用程序請求一個連接時,連接池為該應用程序分配一個連接而不是重新建立一個連接;當應用程序使用完連接后,該連接被歸還給連接池而不是直接釋放。

優點:
1。使用連接池的最主要的優點是性能。
2。創建一個新的數據庫連接所耗費的時間主要取決于網絡的速度以及應用程序和數據庫服務器的(網絡)距離,而且這個過程通常是一個很耗時的過程。而采用數據庫連接池后,數據庫連接請求可以直接通過連接池滿足而不需要為該請求重新連接、認證到數據庫服務器,這樣就節省了時間。

缺點:
1。數據庫連接池中可能存在著多個沒有被使用的連接一直連接著數據庫(這意味著資源的浪費)。
ps:這必須要求開發人員在開發時估計這個系統最大提供的數量是多少。

池的創建和分配
當連接打開時,將根據一種精確的匹配算法來創建連接池,該算法會使連接池與連接中的字符串相關聯。每個連接池都與一個不同的連接字符串相關聯。當新連接打開時,如果連接字符串不精確匹配現有池,則將創建一個新池。

在以下示例中,將創建三個新的 SqlConnection 對象,但只需要使用兩個連接池來管理這些對象。請注意,第一個和第二個連接字符串的差異在于為 Initial Catalog 分配的值。

SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=northwind";
conn.Open();
// 連接池A創建了

SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=pubs";
conn.Open();
// 連接池B創建了,因為ConnectionString與A不匹配

SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=northwind";
conn.Open();
// 使用A的連接池,因為ConnectionString與A匹配

連接池一旦創建,直到活動進程終止時才會被毀壞。非活動或空池的維護只需要最少的系統開銷。

連接的添加
連接池是為每個唯一的連接字符串創建的。當創建一個池后,將創建多個連接對象并將其添加到該池中,以滿足最小池大小的要求。連接將根據需要添加到池中,直至達到最大池大小。

當請求 SqlConnection 對象時,如果存在可用的連接,則將從池中獲取該對象。若要成為可用連接,該連接當前必須未被使用,具有匹配的事務上下文或者不與任何事務上下文相關聯,并且具有與服務器的有效鏈接。

如果已達到最大池大小且不存在可用的連接,則該請求將會排隊。當連接被釋放回池中時,連接池管理程序通過重新分配連接來滿足這些請求。對 Connection 調用 Close 或 Dispose 時,連接被釋放回池中。

警告 建議使用完 Connection 后始終將其關閉,以便連接可以返回到池中。這可以使用 Connection 對象的 Close 或 Dispose 方法來實現。不是顯式關閉的連接可能不會添加或返回到池中。例如,如果連接已超出范圍但沒有顯式關閉,則僅當達到最大池大小而該連接仍然有效時,該連接才會返回到連接池中。
注意 不要在類的 Finalize 方法中對 Connection、DataReader 或任何其他托管對象調用 Close 或 Dispose。在終結器中,僅釋放類直接擁有的非托管資源。如果類不擁有任何非托管資源,則不要在類定義中包含 Finalize 方法。有關更多信息,請參見垃圾回收編程。

連接的移除
如果連接生存期已過期,或者連接池管理程序檢測到與服務器的連接已斷開,連接池管理程序將從池中移除該連接。請注意,只有在嘗試與服務器進行通信后,才可以檢測到這種情況。如果發現某連接不再連接到服務器,則會將其標記為無效。連接池管理程序會定期掃描連接池,查找已釋放到池中并標記為無效的對象。找到后,這些連接將被永久移除。

如果存在與已消失的服務器的連接,那么即使連接池管理程序未檢測到已斷開的連接并將其標記為無效,仍有可能將此連接從池中取出。當發生這種情況時,將生成異常。但是,為了將該連接釋放回池中,仍必須將其關閉。

字符串關鍵字:
Connection Lifetime 0 當連接返回到池中時,將對它的創建時間和當前時間進行比較,如果時間間隔超過由 Connection Lifetime 指定的值(以秒為單位),則會毀壞該連接。在聚集配置中可以使用它來強制在運行服務器和剛聯機的服務器之間達到負載平衡。
如果值為零 (0),則將使池連接具有最大的超時期限。

Connection Reset 'true' 確定在從池中移除數據庫連接時是否將其重置。對于 Microsoft SQL Server 版本 7.0,如果設置為 false,將避免在獲取連接時經歷一個額外的往返過程,但必須注意的是連接狀態(如數據庫上下文)不會被重置。
Enlist 'true' 當為 true 時,如果存在事務上下文,池管理程序將自動在創建線程的當前事務上下文中登記連接。
Max Pool Size 100 池中允許的最大連接數。
Min Pool Size 0 池中維護的最小連接數。
Pooling 'true' 當為 true 時,將從相應的池中取出連接,或者在必要時創建連接并將其添加到相應的池中。

實例代碼:
namespace HowTo.Samples.ADONET
{

using System;
using System.Data.SqlClient;

public class connectionpooling
{
public static void Main()
{
connectionpooling myconnectionpooling = new connectionpooling();
myconnectionpooling.Run();
}

public void Run()
{
try
{
String connString;

// Specification in the connection string:
// Please note: Pooling is implicit, you automatically get it unless you disable it.
// Therefore, "true" is the default for the pooling keyword (pooling=true).
// Connection Reset: False
// Connection Lifetime: 5
// Enlist: true
// Min Pool Size: 1
// Max Pool Size: 50
connString = "server=(local)\\NetSDK;Trusted_Connection=yes;database=northwind;" +
"connection reset=false;" +
"connection lifetime=5;" +
"min pool size=1;" +
"max pool size=50";

SqlConnection myConnection1 = new SqlConnection(connString);
SqlConnection myConnection2 = new SqlConnection(connString);
SqlConnection myConnection3 = new SqlConnection(connString);

// Open two connections.
Console.WriteLine ("打開兩個連接。");
myConnection1.Open();
myConnection2.Open();

// Now there are two connections in the pool that matches the connection string.
// Return the both connections to the pool.
Console.WriteLine ("將兩個連接都返回到池中。");
myConnection1.Close();
myConnection2.Close();

// Get a connection out of the pool.
Console.WriteLine ("從池中打開一個連接。");
myConnection1.Open();

// Get a second connection out of the pool.
Console.WriteLine ("從池中打開第二個連接。");
myConnection2.Open();

// Open a third connection.
Console.WriteLine ("打開第三個連接。");
myConnection3.Open();

// Return the all connections to the pool.
Console.WriteLine ("將所有三個連接都返回到池中。");
myConnection1.Close();
myConnection2.Close();
myConnection3.Close();
}
catch (Exception e)
{
// Display the error.
Console.WriteLine(e.ToString());
}
}
}

}





主站蜘蛛池模板: 亚综合| 亚洲欧美日韩专区一 | 中文字幕在线有码高清视频 | 日韩尤物 | 香港三级理论在线播放1 | 在线观看免费为成年视频 | 亚洲黄网在线 | 日本成人小视频 | 天天综合网站 | 日本高清在线观看视频你懂的 | 日日爱网站 | 窝窝女人体国产午夜视频 | 亚洲精品在线播放视频 | 亚洲欧洲日本在线观看 | 日韩亚洲欧美在线 | 欧美性视频在线播放黑人 | 在线色| 最近最新中文字幕免费的一页 | 亚洲人成高清 | 亚洲欧美日韩中文不卡 | 三级国产4国语三级在线 | 亚洲第一福利视频 | 亚洲ab| 亚洲精品图区 | 日日摸日日添夜夜爽97 | 啪啪导航 | 亚洲 丝袜 制服 欧美 另类 | 在线看欧美日韩中文字幕 | 天天爱天天色 | 日韩成人免费观看 | 青青国产成人精品视频 | 青青草原免费在线观看视频 | 亚洲成a人片77777老司机 | 日韩黄视频 | 亚洲天堂中文字幕在线观看 | 亚洲欧洲免费 | 中文www新版资源在线 | 中文字幕欧美日韩 | 色亚洲欧美 | 日本高清视频不卡 | 无遮挡毛片a级武则天 |