天天看點

*(轉)逾時時間已到。逾時時間已到 但是尚未從池中擷取連接配接。出現這種情況可能是因為所有池連接配接均在使用 并且達到了最大池大小。

這是個老問題了!你就查兩點:  

  一、看所有open的連接配接是否都close了。  

  二、如果通路量很大,加上Max   Pool   Size=512這一句,當然這是要以損失系統性能為代價的!  

  這樣以後一定可以解決你的問題!

  解決方案一

我 想原因可能是并發操作。DataReader是獨占連接配接的,就是說你的程式可能設計上有問題。比如說最大連接配接設100,假設有100個人同時使用 DataReader正在讀取資料庫内容,那麼當第101人讀取的時候,連接配接池中的連接配接已經沒有了,就會出現上面的錯誤。DataReader是獨占連接配接 的,每個DataReader都要占用一個連接配接。當然這個情況是偶爾出現的,是以會很長時間出現一次,因為隻有同時有超過連接配接池最大連接配接數量的并發操作才 會發生。而且你加大并發數量隻能暫時緩解問題,如果你加大到200個并發連接配接,如果有201 人同時操作怎麼辦?你說了你使用Connection對象的Close()方法,這是不行的,因為Close()方法僅僅是關閉連接配接,但這個連接配接沒有釋 放,還是被這個對象占用,要釋放必須使用Connection的Dispose()方法顯式釋放連接配接才可以,否則這個對象占用的連接配接隻能等到垃圾收集的情 況下才能被釋放。這種情況肯定會出現“逾時時間已到”的錯誤。

解決方法:

         1 修改幾個關鍵頁面或通路比較頻繁的資料庫通路操作,使用DataAdapter和DataSet來擷取資料庫資料,不要使用DataReader。

         2 在通路資料庫的頁面上使用資料緩存,如果頁面的資料不是經常更新(幾分鐘更新一次)的話,使用Cache對象可以不用通路資料庫而使用緩存中的内容,那麼可以大大減少連接配接數量。

         3 修改代碼,把使用Connection對象的地方都在Close()後面加上Dispose()調用。

         4 建議對資料庫操作進行大的修改,建立自己的資料庫操作代理類,繼承System.IDisposable接口,強迫釋放資源,這樣就不會出現連接配接數量不夠的問題了。

解決方案二

解決方法(*):WEB.config 裡面:在資料庫連接配接加 Max Pool Size = 512;server=local;uid=;pwd=;database=2004;Max Pool Size = 512;">一勞永逸。

解決方案三

估計是連接配接(Connection)對象沒有Close。倒是不必Dispose,而DataReader用完後應該關閉,但不關閉也沒問題,隻是不關閉的話此連接配接對象就一直不能用,隻要你最終關閉了連接配接對象就不會出問題。   

   連接配接對象在Open後的操作都放在try塊中,後面跟一個finally塊:conn.Close();