键入的数据表内存泄漏

时间:2017-10-07 06:49:39

标签: vb.net memory-leaks datatable typed

我有一个使用类型化datarow的类型化数据表。 在我的表中,我在创建时定义了不同的列。 我的表包含许多我用于索引的字典(类型,列表(数据行))。我没有使用外部数据源。它全都在内存中,因为我的工具需要一个非常简单的数据库,但我不想使用外部数据库。 现在,这个数据表是我所有应用程序上的公共变量定义。用户可以通过加载文件来加载数据。为简单起见,数据行将被删除,并在用户加载文件时加载新数据行。 问题是,永远不会释放内存:每次用户加载文件时,内存消耗都会增加,而且永远不会下降。 我尝试了很多东西:

Datatable.rows.Clear
Datatable.acceptchanges '-> Doesn't work

Row.delete
row.acceptchange 'on each row 
'-> doesn't work

Datatable = nothing 
datatable = new typed datatable 
'-> doesn't work

Datatable.dispose
datatable = new typed datatable
'-> doesn't work

我甚至尝试用新值替换行值,而不是替换所有数据行,但没有运气。 每次,我都会对所有内部词典进行Dictionnary.clear。 在我键入的数据行中,我尝试实现自定义删除以使所有值=无。它也不起作用。

我在清空表后尝试放入GC.collect()。

我的数据表继承自datatablebase,它本身继承自datatable(因为我有多个类型化的数据表,都使用相同类型的数据行 - >列可以更改,但数据行的属性测试是否属于发送回值之前的数据表。 行数可以在0到150000行之间(取决于加载的文件)。

我在这里做错了什么?如果用户更改了数据库的次数太多,则会通过“内存不足”来完成#34;

编辑:我无法真正展示代码,因为代码位于多处,但基本上是:

'Addind a row :
DT.addrow({myarrayofvalue})
'For each dictionnary (let's say the dictionary already exists )
'dictionary are dictionary (of integer, list (of datarow))
'there is a special code which create the list if the key doesn't exists
dictionnary(row.columnX).Add(row)

'now, when reloading data (let's say dico is one of my dictionary)
dico.clear
DT.rows.clear
DT.LoadDatagain

我做了更多的测试,我看到如果我只是重新生成字典(清除它们,然后逐行重新创建它们),还会有内存泄漏...但不像我更换所有数据时那么大。 )只是dico.clear是不够的? 它就像我创建(和删除)的所有数据行一样保存在某个地方......

编辑:好的,新测试:

Private DT as new datatable
Sub test()
   DT.Readxml(myfile)
   DT.acceptchanges()
   DT.rows.clear()
   DT.Acceptchanges()
End sub

我多次运行子测试,并且没有释放内存。它增加,增加和增加...... 这是一个经典的数据表,而不是一个类型的数据表(我在其他地方定义了这一列,但这不是重点......它与数据集相同) 我真的不明白......

0 个答案:

没有答案