2012-04-01 62 views
0

我正在开发一个.NET 3.5项目,并且将使用具有多个DataTables和DataTables之间关系的DataSet。我将从SQL中获取一定数量的记录以填充DataTable,然后处理这些记录。在完成处理记录后,我想清除DataSet并获取下一组记录。我一直在读Clear()方法不会清除内存中的行。我如何重用DataSet而不会导致我的内存在获取记录的整个过程中继续增加?重复使用相同的DataSet而没有内存问题

+0

只需更改您的选择标准并再次调用Fill。如果表或关系发生变化,您只需要关注数据集,然后创建一个新数据集并将其传递给处理函数。 – 2012-04-01 15:39:53

+0

我的关注点在于记忆。这个过程将在数千个运行数小时的记录上工作。我需要确保内存管理正确。 – user31673 2012-04-01 15:52:56

+0

但是一旦DataRow不再被引用,GC应该将其清除,Clear或Fill将会这样做。看起来像是对我不成熟的优化,找出你的担忧是否合理,一个简单的POC风格的审判将做到这一点。 – 2012-04-01 16:54:52

回答

1

MSDN指出the DataSet.Clear method clears the DataSet of any data by removing all rows in all tables.。它将保持所有表格和关系不变,但清除所有行。

你在哪里读过?

+0

如果您在以下链接http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataset/thread/41e1b19a-b5ee-4cf2-ac1e-ff0c9a35b961上阅读了Microsoft员工的回复,您会看到他声明以下内容:DataSet.Clear()和DataSet.Dispose()不会使行由GC清除。 .Clear()方法将删除数据集内每个数据表中的所有数据行。此外,.Dispose()方法由DataSet MarshalByValueComonent的基类实现,因此它不释放数据集的受管资源。 – user31673 2012-04-01 16:46:48

+0

这就是说行被清除,元数据(表格关系等不是),这是很好的,因为它不太可能你想要它们。如果元数据是不同的每个运行然后null或分配给一个新的等 – 2012-04-01 17:01:18

相关问题