来自互操作对象的VB6内存泄漏

来自互操作对象的VB6内存泄漏,vb6,activex,com-interop,Vb6,Activex,Com Interop,我有一个activeX互操作控件,用于旧的VB6应用程序。ActiveX控件是一个gridview组件,它加载了几十万条记录,每次启动时都会消耗大约300MB的内存 最终VB内存耗尽 互操作控件与普通activex控件一样被引用,并使用以下代码加载 dim withevents gridview as vbcontrolextender dim withevents uv as applicationlistcontrol.appgrid dim imc as applicationlistco

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

最终VB内存耗尽

互操作控件与普通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;

控件是否有某种
.Dispose()
方法?现在正处于测试模式。但是我可以添加我想要的任何东西。如果你已经编写了这个组件并且控制了源代码,你应该在这里添加源代码。尽量使尽可能小的完整代码样本再现问题。@siwix仅供参考,我将您的注释中的代码添加到Q中,以便我可以阅读它;但是将来你可以自己编辑Q来做这件事。为了测试的目的,如果GC调用在正确的位置上,它会很有用。但是我不认为这是正确的位置:)一旦分配给控件的内存不再需要,您可能会想调用它们,但在您发布的代码中似乎仍然需要它。基本上在
表单的末尾调用它。为此,您可能需要添加一个临时方法。另外,在
WaitForFullGCComplete