[英]Connection Pooling with Task Parallel Library in .NET 4
我有exe文件,該文件在服務器上連續運行,用於成千上萬個文件的批處理,文件中的數據插入到數據庫中,所有文件都使用相同的連接字符串。 我已經利用.net 4的TPL來提高性能。 代碼的基本流程如下,因為我對連接池知之甚少,因此以下方法會給我帶來麻煩,請提出建議。 謝謝。
流程:1.創建任務數組(大約50個任務,用於50個文件)2.將每個任務添加到數組的任務中3.等待所有任務,然后對下一個50個文件重復
Task[] taskArry = new Task[50];
for (int i = 0; i < 50; i++)
{
taskArry[i]=(Task.Factory.StartNew(() => InstanceDataObject.InserData()));
//var t2 = Task.Factory.StartNew(() => InsertData());
}
Task.WaitAll(taskArry);
這里要注意的關鍵點是,我正在為InsertData()方法中的每個任務初始化連接對象,因為每個任務必須通過事務執行,因此為50創建了50個連接。這會影響性能嗎?
internal static void InserData(string insPath, int filingId)
{
try
{
DataAccess dataAcess = new DataAccess(true);
// insert operation here
dataAcess.CommitTransaction();
}
finally
{
dataAcess.Dispose();
_dbmanager = null;
}
}
我正在使用這樣的連接字符串,例如“ Server = Test; User id = user; Password = @ 1234; database = test”,因為默認連接池已為連接字符串啟用i我沒有設置任何與池相關的參數。 Shall i have to set the parameter regarding connection pooling?
對於我的情況
從理論上講,是的,它應該更快。
實際上,這取決於InsertData()
運行多長時間。 如果速度足夠慢,那么這50個任務中的每一個都可能最終創建自己的連接(因為該池始終為空),因此從連接池中將無法獲得任何好處。
最好的辦法是嘗試在啟用和禁用緩沖池的情況下嘗試代碼,並查看哪種更好(嘗試盡可能緊密地模擬您的生產環境-網絡延遲以及客戶端和服務器的性能將對數據產生很大的影響) 。
您還可以使用ADO.NET( http://msdn.microsoft.com/zh-cn/library/ms254503.aspx )中內置的性能計數器來幫助您評估池是否在幫助您。 嘗試在啟用池的情況下運行代碼,並查看NumberOfPooledConnections
計數器-如果該值小於50,則說明您已成功重用連接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.