PAE的.NET OutOfMemory异常

时间:2013-11-25 09:43:15

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

我有一个在带有PAE的Windows 2003 x86上运行的应用程序。操作系统有8 GB RAM。 在应用程序运行期间,分配了一些内存,在主机进程增长到大约1GB并且总系统内存增长超过4GB之后,我得到了一个OOM异常。

那时大约有4GB RAM可用,单个进程大约有1GB到2GB的限制。

所以问题是:如果我有足够的可用内存,那么这个异常的来源会在哪里?

2 个答案:

答案 0 :(得分:0)

请记住回答“我的程序使用了多少内存?”的问题。不是那么简单,答案取决于你测量的计数器

我会从使用Process Monitor工具开始检查您的应用程序并观察:

  • 私人字节
  • 工作集
  • 虚拟字节

另请参阅that question以查找有关不同内存使用率指标的更多详细信息。

由于我也是WinDbg的忠实粉丝,我会在发生OOM异常时对该进程进行完整的内存转储并详细分析。

答案 1 :(得分:0)

重要的不是系统可用的内存量,而是重要的是进程可用的内存量。由于您的进程是32位进程,因此硬限制为4GB。

所以你没有4GB可用内存,系统可以。您已经使用了4GB的分配而内存不足。

前进的唯一方法是转向64位进程。显然,这需要64位系统。