【问题标题】:Determine available memory that can be used before OutOfMemoryException is thrown确定在抛出 OutOfMemoryException 之前可以使用的可用内存
【发布时间】:2013-03-09 01:08:22
【问题描述】:

我的应用程序的OutOfMemoryException 在系统本身内存不足之前就被抛出了,如下所示:
MSDN Blogs - Out of memory? Easy ways to increase the memory available to your program.

当你运行你的 C# 应用程序时,你可能会抛出一个OutOfMemoryException,即使你的机器有很多内存。 [...] 4 Gigs 分为两半:用户应用程序获得下半部分,操作系统获得上半部分。 (此边界可以更改:见下文)。

根据要求,我需要可视化我的应用程序可用的内存量以及当前的使用情况。可以使用Process.GetCurrentProcess(); 和其他方法检索当前使用情况,但是如何确定我的应用程序在运行时可用的内存?我就是想不通。

【问题讨论】:

  • 试试CLR Profiler
  • 默认情况下,单个进程可以占用自己的最大内存量,我很确定它在 Windows 上是 1GB。当然你可以使用更多,但我无法帮助你如何做到这一点。
  • 没有地址空间在 x86 上是 2GB
  • 无论如何,如果您的应用程序是 32 位,那么您将受到很大限制。
  • 发布您的代码,如果您愿意,人们可以帮助您优化它

标签: c# .net memory-management out-of-memory


【解决方案1】:

您可以在大分配之前使用MemoryFailPoint 进行检查。这并不是您所要求的,但如果您的失败发生在特定的已知大型分配点,这至少可以让您在分配失败发生时干净利落地处理。

【讨论】:

    猜你喜欢
    • 2010-10-29
    • 2011-06-08
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    相关资源
    最近更新 更多