我的代码不释放文件句柄,即使以后我打电话处置已初始化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. OpenSSL不会释放文件句柄
- 3. 如何强制Nunit释放本机DLL上的句柄?
- 4. python不释放文件句柄到日志文件
- 5. 为什么在调用file.close()后Python不释放文件句柄?
- 6. 子进程似乎结束,但不释放文件句柄
- 7. 想要脚本Windows WMI(wmiprvse.exe)释放文件上的句柄
- 8. Python子进程kill不会释放文件句柄
- 9. Process.Kill是否释放诸如文件句柄之类的资源?
- 10. 释放在C#中的OLE的IStorage文件句柄
- 11. 在自动生成过程中释放Windows文件句柄
- 12. 释放文件上的句柄。来自BitmapImage的ImageSource
- 13. 检查何时在Java中释放所有文件句柄
- 14. GCHandle.Free()是否简单地释放句柄?
- 15. 如何通过C#释放句柄?
- 16. 如何在java中释放句柄
- 17. 强制Java发布Java中的所有文件锁/句柄
- 18. 强制创建一个WPF窗口的本机Win32句柄
- 19. ADOX留下的文件句柄开放
- 20. perl中同一个文件的两个文件句柄
- 21. 写文件(句柄)的内容,以不同的文件句柄
- 22. 关闭文件句柄是否在Windows中释放关联的内存?
- 23. 分配一个C文件句柄C++文件流
- 24. 强制创建控制柄
- 25. 强制一个std :: vector释放它的内存?
- 26. 程序文件句柄
- 27. GetFileSizeEx损坏文件句柄
- 28. 嘲讽文件句柄
- 29. 追踪文件句柄
- 30. GetFileInformationByHandle()为stdio文件句柄
真的很奇怪。我实际上正在打电话给处理和关闭。 – Jonn 2010-05-19 07:49:02