微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VB6来自Interop对象的内存泄漏

如何解决VB6来自Interop对象的内存泄漏

我有一个ActiveX互操作控件,该控件在旧的VB6应用程序中使用。 ActiveX控件是gridview组件,它加载数十万条记录,每次启动时都会消耗大约300MB的内存。

最终VB内存不足。

interop控件的引用类似于普通的activex控件,并使用以下代码加载

dim withevents gridview as vbcontrolextender
dim withevents uv as applicationlistcontrol.appgrid
dim imc as applicationlistcontrol.iappgrid

private sub form_load

set gridview = Controls.Add("Applicationlistcontrol.appgrid","ApplicationListView",me)
set uv = gridview.Control
set imc = uv
imc.FillGrid '(Calls the C# control and loads data into grid)
end sub

private sub form_unload
set imc = nothing
set uv = nothing 
set gridview = nothing 
end sub

退出应用程序并返回到VB6 IDE时,还会保留内存,下次启动时,将占用另外300 MB。

这是加载数据的功能

using (sqlConnection connection = new sqlConnection(_connectionString)) 
{ 
    connection.open(); 
    using (var command = new sqlCommand("SELECT * FROM APPLICATION_LIST WHERE APPLICATION_TYPE_ID = 1",connection)) 
    { 
        using (var table = new DataTable()) 
        { 
            table.Load(command.ExecuteReader()); 
        } 
    } 
} 

GC.Collect(); 
GC.WaitForFullGCComplete(); 
return null;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。