在32位应用程序中使用3Gb内存

时间:2012-09-18 04:36:09

标签: c# .net memory

我正在开发一个导入大量数据的应用程序,在一些paralells线程中。

有时我得到了OutOfMemoryException(当我使用1.5,1.7GB的ram时)。

没什么大不了的,我以为我会把它变成64位程序(因为它不是那么大)。但由于.Net错误(64位不能有十进制的主键),我只能做64位程序。(description of the problem我发现了很多其他情况。我只是无法改变任何东西在这个数据库中,甚至不是类型或添加视图)。

我不需要比1.5-1-7GB的RAM多得多。如果我能达到2.5GB的价格,我会很高兴。

我读了一些关于“LARGEADDRESSAWARE”的内容,但我没有找到在我的visual studio上设置它的地方,以及大多数其他提示我应该修改boot.ini文件的提示。

但由于我的电脑已经是64位电脑(有8GB的内存),我觉得我不会在这里做点什么。

那么我应该怎么做才能访问那些3GB的ram?

2 个答案:

答案 0 :(得分:1)

使用editbin设置LARGEADDRESSAWARE标志,如Can I set LARGEADDRESSAWARE from within Visual Studio?中建议的那样。

editbin /largeaddressaware $(TargetPath) 

您需要运行x64版本的Windows或正如您所提到的32位系统更改Boot.ini,以允许应用程序使用3Gb的地址空间和/3GB开关。

答案 1 :(得分:0)

32位应用程序具有4GiB的虚拟地址空间。如果我没记错的话,默认情况下,Windows会将其分成2GiB用于应用程序(包括代码,堆栈,数据)和2GiB用于系统。

应该有一种方法可以将应用程序更改为3 GiB,为系统更改为1 GiB,但我认为在任何情况下都不能超越它。