我有一个大的2GB文件,有150万个列表要处理。我正在运行一个控制台应用程序,它执行一些字符串操作,然后将每个列表上传到数据库。
我创建了一个LINQ对象并通过为每个列表(循环)将其分配给新的LinqObject()来清除该对象。
当对象完成后,我将其添加到列表中。
当列表达到100个对象时,我在整个列表中提交所有内容,清除列表,然后重复。
程序运行时,我的内存使用量持续增长。我应该做些什么来减少内存使用量?我试过GC.collect。我想我想用处理..
提前感谢您的光临。
答案 0 :(得分:2)
程序的内存使用量在正常工作时增加是正常的。您不应该尝试强制垃圾收集器减少内存使用以尝试节省资源,这很可能会浪费资源。
与一个人的第一反应相反,只要有任何空闲内存,高内存使用率就不是性能问题。拥有大量未使用的内存并不会增加性能。如果你试图减少内存使用量只是为了让它保持不变,你就是在浪费CPU时间进行不需要的清理工作。
如果您的可用内存不足或某些其他应用程序需要它,垃圾收集器将进行适当的清理。在几乎所有情况下,垃圾收集器都会比编写代码时更多地了解当前的内存情况。
如果您正在使用实现IDisposable接口的对象,则应调用Dispose方法以释放非托管资源,但所有其他对象都由垃圾回收器处理。托管对象通常不会泄漏内存。
答案 1 :(得分:0)
你需要你的内存使用率是否保持低水平?如果没有实际的功能问题,高内存使用本身就不是问题。
答案 2 :(得分:0)
内存使用量增长了多少?可能是.NET只是有效地“解决”了。
目前还不清楚你是如何做到这一点的,但一般原则听起来还不错。我建议你把数据库工作排除在外 - 只需注释掉实际提交给数据库的那一行。查看使用了多少内存。除了StreamReader
(或其他)之外,如果您没有触及数据库,则不应该有任何其他需要处理的东西 - 只需构建批量转换对象并将其丢弃。