我的代碼不釋放文件句柄,即使以後我打電話處置已初始化OleDbException。有沒有辦法明確強制程序發佈文件句柄?
3
A
回答
4
默認情況下,.NET數據庫連接使用pooling。調用Close()
和Dispose()
只是將連接釋放回池中,實際上並未強制它關閉。最終它會離開游泳池,實際上會被關閉。
了一些研究之後,似乎得到它預見的關閉方式主要有兩種:
- 在連接字符串中禁用池 - 嘗試加入
OLE DB Services = -2;
,這應該給你所有的服務,除了彙集 - 儘量利用
對於您可能需要使用超時播放後一種方法 - 從鏈接的MSDN文章節選:
請注意,單獨調用方法實際上並不釋放池中存在的活動連接。
池終於佈置之前,必須進行以下操作:
- 調用Close連接對象返回到池中。
- 允許每個連接對象超時。
- 調用ReleaseObjectPool。
- 調用垃圾回收。
我在工作中,一些內部軟件需要用一塊舊的,不靈活,片狀,絕對關鍵專有軟件交互的用例此。它需要在儘可能短的時間內打開一個共享的MDB數據庫文件,以儘可能減少其他軟件可能「遇到問題」的窗口(非常糟糕的事情)。
我打算使用連接字符串的方法,因爲它看起來更簡單,以保證關閉,我的軟件並沒有真正從池中受益。
0
不知道爲什麼你的代碼不關閉句柄調用Dispose()之後,因爲這調用Close()在幕後,但下面的情況幫你寫常見的方式代碼:
using (OleDbConnection conn = new OleDbConnection(connString))
{
//your stuff here
conn.Close(); //not necessary, but doesn't hurt
}
無論是否拋出異常,這都會關閉你的句柄。使用塊將關閉/處理塊末尾的資源。
相關問題
- 1. 釋放java文件句柄
- 2. rsyslog不釋放文件句柄
- 3. 石英不能釋放文件句柄
- 4. OpenSSL不會釋放文件句柄
- 5. 如何強制Nunit釋放本機DLL上的句柄?
- 6. python不釋放文件句柄到日誌文件
- 7. 如何強制Jetty的Maven插件關閉其文件句柄?
- 8. 釋放在C#中的OLE的IStorage文件句柄
- 9. 爲什麼在調用file.close()後Python不釋放文件句柄?
- 10. Python子進程kill不會釋放文件句柄
- 11. 檢查何時在Java中釋放所有文件句柄
- 12. taglib-ruby和資源平衡(釋放文件句柄)?
- 13. Process.Kill是否釋放諸如文件句柄之類的資源?
- 14. 在自動生成過程中釋放Windows文件句柄
- 15. 想要腳本Windows WMI(wmiprvse.exe)釋放文件上的句柄
- 16. Java Classloader在Windows下不釋放文件句柄
- 17. 子進程似乎結束,但不釋放文件句柄
- 18. 釋放文件上的句柄。來自BitmapImage的ImageSource
- 19. JavaFX 2.2 MediaPlayer:如何在Windows上釋放媒體文件句柄
- 20. 釋放註冊表句柄更快
- 21. 誰在SetClipboardData(CF_BITMAP,HBITMAP)中釋放句柄?
- 22. 如何在java中釋放句柄
- 23. 如何通過C#釋放句柄?
- 24. GCHandle.Free()是否簡單地釋放句柄?
- 25. 強制Java發佈Java中的所有文件鎖/句柄
- 26. 強制創建一個WPF窗口的本機Win32句柄
- 27. ADOX留下的文件句柄開放
- 28. perl中同一個文件的兩個文件句柄
- 29. 寫文件(句柄)的內容,以不同的文件句柄
- 30. 以前關閉的文件句柄上的fclose()的雙倍釋放錯誤
真的很奇怪。我實際上正在打電話給處理和關閉。 – Jonn 2010-05-19 07:49:02