强制OleDbConnection释放文件句柄

Jon*_*onn 3 .net oledb file-handling

相关问题

即使在我调用dispose初始化的OleDbException之后,我的代码也不会释放文件句柄。有没有一种方法可以明确地强制程序释放文件句柄?

小智 5

默认情况下,.NET数据库连接使用缓冲池。调用Close()Dispose()只是将连接释放回池中,实际上并没有强制其关闭。最终,它将超出池中的时间,并实际上已关闭。

经过一些研究,似乎有两种主要方法可以使它可预测地接近:

  1. 禁用连接字符串中的池-尝试添加OLE DB Services = -2;,这应该为您提供除池之外的所有服务
  2. 尝试利用 OleDBConnection.ReleaseObjectPool()

对于后一种方法,您可能需要处理超时-链接的MSDN文章摘录:

请注意,仅调用该方法实际上并不会释放池中存在的活动连接。

最终处置池之前,必须进行以下操作:

  1. 调用关闭以将连接对象返回到池中。
  2. 允许每个连接对象在池中超时。
  3. 调用ReleaseObjectPool。
  4. 调用垃圾回收。

我有一个工作用例,其中一些内部软件需要与旧的,不灵活的,易碎的且绝对关键的专有软件进行交互。它需要在尽可能短的时间内打开一个共享的MDB数据库文件,以最小化其他软件可能“出现问题”的窗口(一件很糟糕的事情)。

我正在计划使用连接字符串方法,因为它看起来更容易保证关闭,而且我的软件并没有真正从池中受益。