在我的 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 文件,但仍然不行:(