来自互操作对象的VB6内存泄漏
我有一个activeX互操作控件,用于旧的VB6应用程序。ActiveX控件是一个gridview组件,它加载了几十万条记录,每次启动时都会消耗大约300MB的内存 最终VB内存耗尽 互操作控件与普通activex控件一样被引用,并使用以下代码加载来自互操作对象的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
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