【问题标题】:Reuse the same DataSet without memory issues重复使用相同的 DataSet 而不会出现内存问题
【发布时间】:2012-04-15 11:24:20
【问题描述】:

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

【问题讨论】:

  • 只需更改您的选择标准并再次调用 Fill。如果表或关系发生变化,您只需要处理数据集,然后您只需创建一个新数据集并将其传递给您的处理函数。
  • 我关心的是内存。此过程将处理运行数小时的数千条记录。我需要确保正确管理内存。
  • 但是一旦 DataRow 不再被引用,GC 应该摆脱它,Clear 或 Fill 会这样做。对我来说似乎是过早的优化,看看你的担心是否合理,一个简单的 POC Style 试验就可以做到。

标签: .net ado.net dataset


【解决方案1】:

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

你从哪里读到的?

【讨论】:

  • 如果您在以下链接 social.msdn.microsoft.com/Forums/en-US/adodotnetdataset/thread/… 阅读 Microsoft 员工的回复,您会看到他声明如下:DataSet.Clear() 和 DataSet.Dispose() 不会生成行被 GC 清除。 .Clear() 方法将删除数据集中每个数据表中的所有数据行。另外,.Dispose()方法是DataSet MarshalByValueComonent的基类实现的,所以不会释放dataset的托管资源。
  • 这就是说行被清除,元数据(表关系等不是),这很好,因为您不太可能希望它们成为。如果元数据每次运行都不同,则为 null 或将其分配给新的等
猜你喜欢
  • 1970-01-01
  • 2014-12-15
  • 2015-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-30
  • 1970-01-01
  • 2010-10-15
相关资源
最近更新 更多