用c#從百萬資料中篩選一些資訊時,經常會出現程式連線逾時的錯誤,常見的錯誤很多,例如:Timeout expired. The timeout period elapsed prior to completion of the operation or the server等等
本文就常見的幾種解決方案進行說明,純屬個人見解,歡迎拍磚
①:當然第一步要查看是否Connection沒關閉問題,一般新手都會犯這個錯誤,需要認真查看一下哦,這個就不詳細說了。
②:如果將sql語句複製到查詢分析器中執行,如果執行時間本來就超過30秒,那麼一般採用如下的解決方案:
首先分析引起Timeout的原因,一般是Connection沒關閉或者SqlConnection.ConnectionTimeout逾時,另外一種就是SqlCommand.CommandTimeout引起的, SqlCommand的此方法為擷取或設定在終止執行命令的嘗試並建置錯誤之前的等待時間,
他的預設為 30 秒,你可以設定為0 ,它表示無限制,但是最好不要去設定0 ,否則會無限的等待下去的,只需要針對查詢分析器的時間,去設定這個時間就可以了
③:執行時間不是很長,但是還是操作逾時,那麼 也有很多原因,一般經常出現的有兩種,asp.Net應用程式的請求逾時,或者是串連池的串連生存期過去,,因為串連池預設值是60秒,那麼針對這兩種解決方案為:
解決應用程式請求逾時:
在web.config中加上以下語句:
<system.web>
<httpRuntime maxRequestLength="102400" executionTimeout="720" />
</system.web>
executionTimeout:是允許執行請求的最大時間限制,單位為秒
maxRequestLength:指示 ASP.Net 支援的最大檔案上傳大小。該限制可以防止。。。。大家都懂的。。呵呵
解決程式池生存周期問題:
在資料庫連接字串中修改:database=AA;uid=sa;pwd=sa; Pooling=true; MAX Pool Size=1024;Min Pool Size=1;Connection Lifetime=60
至於含義基本上從英文的意思上大家就明白了,呵呵。。。當然Min Pool Size=1這個設定還有很多講究,如果想研究的可以看一下下面的文章,呵呵
http://www.cnblogs.com/ZHUYIN/archive/2011/11/02/2232578.html