0

我有一个 2GB 的大文件,有 150 万个列表要处理。我正在运行一个控制台应用程序,它执行一些字符串操作,然后将每个列表上传到数据库。

  1. 我创建了一个 LINQ 对象并通过将其分配给每个列表(循环)的新 LinqObject() 来清除该对象。

  2. 对象完成后,我将其添加到列表中。

  3. 当列表达到 100 个对象时,我在整个列表上 submitAll,清除列表,然后重复。

随着程序的运行,我的内存使用量继续增长。我应该做些什么来降低内存使用量?我试过 GC.collect。我想我想使用 dispose..

提前感谢您的关注。

4

3 回答 3

2

程序运行时内存使用量增加是正常的。你不应该试图强制垃圾收集器减少内存使用来尝试节省资源,这很可能会浪费资源。

与人们的第一反应相反,只要还有空闲内存,高内存使用就不是性能问题。拥有大量未使用的内存并不会提高性能。如果您试图减少内存使用量只是为了保持它的下降,那么您只是在浪费 CPU 时间进行不需要的清理。

如果您的可用内存不足或其他应用程序需要它,垃圾收集器将进行适当的清理。在几乎所有情况下,垃圾收集器对当前内存情况的了解比您在编写代码时可能预期的要多得多。

如果您正在使用实现 IDisposable 接口的对象,则应调用 Dispose 方法来释放非托管资源,但所有其他对象都由垃圾收集器处理。托管对象通常根本不会泄漏内存。

于 2009-07-23T18:43:07.690 回答
0

您是否需要保持较低的内存使用量?如果没有实际的功能问题,高内存使用本身就不是问题。

于 2009-07-23T18:26:56.020 回答
0

内存使用量增长了多少?.NET 可能只是有效地“解决”。

目前还不清楚你是如何做到这一点的,但一般原则听起来不错。我建议您将数据库工作排除在外 - 只需注释掉实际提交给数据库的任何行。查看使用了多少内存。除了StreamReader(或其他)之外,如果您不接触数据库,您不应该有任何其他需要处理的东西 - 只需构建批量转换的对象并将它们扔掉。

于 2009-07-23T18:32:16.213 回答