我开发了一个基准样式的控制台应用程序(C#4.0)。工作得很好,有50,000或1,000,000次迭代。然后我将迭代次数增加到50,000,000。但是花了太多时间,我强迫它退出。该应用程序正常退出,但在我的主驱动器(C :)仍然只有3.8 GB可用。在测试之前,可用空间为14 GB。有10 GB吃了!!!请问,有人可以解释为什么会这样吗?
大家好,
我在项目目录中找到* .vsp文件(9 GB !!!)。是的,它可能看起来很愚蠢,因为我查找了主驱动器上的每个系统隐藏文件夹,但我从未想过这个巨大的文件可能在我的项目文件夹中。在50,000,000次迭代之后,我觉得我的系统变慢了,我在VS2010中运行了Performance Wizard。但迭代计数很少,所以我不认为性能向导可以创建这么大的文件!谢谢大家!
答案 0 :(得分:4)
没有更多的信息(就像测试实际做的那样),我的猜测是程序泄漏了内存,就像筛子一样,Windows通过稳定增加交换/分页文件的大小来补偿,在此过程中占用了你的硬盘空间。您可以查看一下C:\pagefile.sys
,看看它有多大。
答案 1 :(得分:1)
为什么 - 它可能取决于你的字符串操作(例如执行连接而不是使用StringBuilder)。
至于空间的位置,如前所述,它可能是您的页面文件。
如果是您的页面文件,回收空间的方法是通过Windows手动将页面文件的大小调整为远低于当前值,然后重新启动。
Windows键+暂停/中断,单击高级系统设置,在性能下,单击设置... 在结果“性能选项”窗口的“虚拟内存”下,单击“更改...”告诉Windows停止自动管理页面文件大小。单击C:驱动器并将其设置为比现在小得多的自定义大小(例如尝试1024MB)。
重新启动计算机,页面文件现在应该更小。在重新启动之前,该空间仍将被使用。
您可能希望将页面文件大小设置回Windows完成后自动管理。
如果您希望避免导致相同问题的代码,可能需要提供一些代码段。
答案 2 :(得分:1)
我猜这是因为虚拟内存交换页面增加,因为GC没有在你的迭代循环中运行,内存使用量增加,最终内存被交换到页面文件。有关控制台应用程序中GC的更多信息,请参阅http://support.microsoft.com/kb/828988。我从未尝试过,但我认为使用MTAThread
属性会有所帮助。
答案 3 :(得分:0)
交换空间的临时文件(虚拟内存)。
您的应用是否会创建文件?它使用了多少内存(任务管理器)?