*(轉)超時時間已到。超時時間已到 可是還沒有從池中獲取鏈接。出現這種狀況多是由於全部池鏈接均在使用 而且達到了最大池大小。

這是個老問題了!你就查兩點:  
  1、看全部open的鏈接是否都close了。  
  2、若是訪問量很大,加上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();數據庫

相關文章
相關標籤/搜索