【问题标题】:Set Maximum Memory Usage C#设置最大内存使用量 C#
【发布时间】:2012-01-23 02:29:52
【问题描述】:

我有一个应用程序,它必须使用一个不是我编写的库,而且我无权更改它。基本上有内存泄漏,所以运行的时间越长,泄漏的越多;它基本上只是写入我无权删除的陈旧页面文件。内存泄漏实际上并没有导致程序崩溃,它只是简单地吃掉了所有的内存。当它使用所有系统的内存时,操作系统将开始删除旧的页面文件,一切运行正常。

如果我在 2gb 系统上运行我的应用程序,它将使用 2gb 并继续运行;对于 16GB 系统也是如此。

有没有办法设置应用程序可以使用的内存量?

【问题讨论】:

标签: c# c#-4.0


【解决方案1】:

这是 Windows 中的每个进程的限制。每个进程在 32 位机器中获得约 2GB 的虚拟地址空间(这是 Heap 所使用的)。恐怕您对此无能为力。

大致来说,CLR 最多可以在内存中保存约 1.6GB 的对象。对于大多数应用程序来说,这应该足够了。如果没有,那么您需要处理您的应用程序。

在我的例子中,我遇到了类似的问题,然后使用 SqlDataReader 获取指定块大小的对象,对其进行处理、计算、从内存中清除它,然后再获取另一个块。

MSDN上也有详细文章-Investigating Memory Issues

希望这会有所帮助。

【讨论】:

  • 我基本上只是玩了我不在乎的牌。我对 Process.MaxWorkingSet 进行了修改,但这并没有达到我想要的效果,所以我把它装袋了。还有一些更复杂的方法,但我希望有一些微不足道的方法。
【解决方案2】:

还可以查看 Process Governer:http://lowleveldesign.wordpress.com/2013/11/21/set-process-memory-limit-with-process-governor/。我编写了这个工具来测试我的应用程序中的内存泄漏。以内存限制运行的进程如果超出内存限制,将抛出 OutOfMemory。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-02
    • 2010-11-13
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    相关资源
    最近更新 更多