簡體   English   中英

.NET 4中帶有任務並行庫的連接池

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM