当我有足够的内存时,为什么会出现OutOfMemory异常?

时间:2017-12-06 12:33:53

标签: visual-studio f# out-of-memory

我有一个程序(Fractal10)执行一个循环,其中迭代次数取决于我手动设置的参数。当迭代次数很少时,程序运行正常。当迭代次数很多时,我得到以下错误:

Unhandled Exception: System.TypeInitializationException: The type initializer for '<StartupCode$Fractal10>.$Program' threw an exception. ---> System.AggregateException: One or more errors occurred. ---> System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown. 

我在Intel Haswell处理器和最新版本的Microsoft Visual Studio 2017上运行带有16 GB内存和25600 MB虚拟内存的Windows 10 Professional。抛出异常后,任务管理器显示以下内容:

Memory: 64%
Fractal10 (32 bit)L 1,719.2 MB # this is the culprit
Microsoft Visual Studio 2017 (32 bit): 822.7 MB
... # other apps

为什么只使用64%的内存时会出现此错误?我有什么可以做的吗?

2 个答案:

答案 0 :(得分:4)

如果您打算使用超过~1.8 GB的内存,则应使用64位版本的软件。

答案 1 :(得分:3)

首先,您的操作系统是32位还是64位?如果是前者,您实际上无法访问所有已安装的内存。

此外,(我假设您正在使用.Net框架,如果我错了,请更正我)您需要在构建配置中将平台目标设置为x64。最重要的是,您可以将以下配置添加到app.config文件中:

<runtime> <gcAllowVeryLargeObjects enabled="true" /> </runtime>

这将允许遍历大于2GB的对象。