表NewRow()导致内存泄漏

Sim*_*eep 7 .net datatable memory-leaks

在调查内存泄漏的同时,我发现它是由多次在循环内的Table上调用NewRow()引起的.但是,创建的DataRow从未添加到Table Rows集合中,并且Table Rows Count从未超过零.

我的问题是,为什么每次调用NewRow时都会占用更多内存,即使新创建的DataRow永远不会被添加到Rows集合中,而从NewRow返回的DataRow总是被分配给同一个局部变量(从而显然丢弃了最后一个新行).

请忽略代码为什么创建没有添加到表中的DataRows的问题!

Ovi*_*rar 6

DataRow从DataTable继承模式,因此DataRow引用了生成该行的表模式.表中的新行处于Detached状态.
这就是为什么GC单独留下新的未使用行.


Ras*_*ber 6

DataTable.NewRow()将创建的行添加到DataTable的RecordManager.我不完全确定为什么会发生这种情况,但这就是它没有被GC释放的原因.

似乎只有两种方法可以摆脱DataRow:

  1. 将其添加到表中,然后将其删除.
  2. 调用DataTable.Clear().