【发布时间】:2012-11-22 12:56:07
【问题描述】:
在我的 VB.NET 项目中追踪内存泄漏一整天后,我已将原因追溯到 FileMaker 的 ODBC 驱动程序的错误!
要重现,您需要一个可以连接的数据库(我的数据库托管在 Server Advanced 11.0.3 上,但您也可以在本地托管它),以及在 PC 上注册/安装的 ODBC 驱动程序(我测试了版本11.3 和 12.0,以及最新的 12.2)。
启动一个新的 VB.NET WinForms 项目,在表单中添加一个按钮并将此代码粘贴到按钮的单击事件中:
Using cn_FM As New Odbc.OdbcConnection("DRIVER={FileMaker ODBC};SERVER=192.168.1.xxx;UID=admin;PWD=admin;DATABASE=test;")
cn_FM.Open()
End Using
此代码所做的只是打开与 FileMaker 数据库的连接,但是如果您在 Windows 任务管理器中分析内存使用情况,您可以很容易地看到(通过反复单击刚刚创建的按钮)cn_FM 没有被正确处理因为句柄不断增加!我尝试强制垃圾收集,但这并没有做任何事情,所以我认为它是驱动程序本身的问题。
哦,我用同样的方法测试了连接到 SQL 数据库,正如你所料,没有句柄泄漏......
谁能确认这是正确的?
编辑:我尝试了各种打开和关闭连接的方法,以及实际在数据库中查询 using 块中的内容。还尝试在本地托管 fp7 文件,但仍然不行:(
【问题讨论】:
-
您是否尝试过同样的方式来处理您的连接?至少 MSDN 说您应该始终处理打开的 ODBCConnection 或将其包装在 using
-
忘记最后的评论,我只是瞎了:(
-
谢谢@igrimpe,是的,这是我尝试的第一件事,这让我觉得它必须是驱动程序......
标签: vb.net memory-leaks odbc driver filemaker