微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何创build32位.NET应用程序以使用3 GB RAM?

我正在创build一个需要使用大量RAM的.NET应用程序(C#)。 我最近知道,在32位版本的Windows XP上,我只能使用2 GB,除非我使用/3Gb开关,并在可执行头文件中设置IMAGE_FILE_LARGE_ADDRESS_AWARE标志。 但是,因为我正在开发一个.NET应用程序,我想我不能直接修改可执行文件,可以吗? 那么,我该怎么做,让我的应用程序使用3 GB?

通过.NET中的svchost.exe共享stream程服务

CoCreateInstance在.NET中精确匹配?

如何声明全局风格,并在uwp中使用该风格

Mono上的跨平台高分辨率计时器?

在C#中获取本地Windows用户login会话时间戳

.NET EXE仍然是一个标准的PE文件; 所以你可以尝试使用editbin /LARGEADDRESSAWARE来设置标志,但是请注意,如果你正在使用类似ClickOnce的东西(因为它保持了文件的加密散列),这是行不通的。

但是,请注意,就单个对象/数组的最大大小而言,您仍将具有相同的.NET限制。 对于大量的内存,x64是一个更好的主意。

/ 3GB开关在OS引导加载程序上,而不是在您的应用程序上。 (编辑:它也存在于本机C / C ++编译器,但不是C#编译器)就您的应用程序而言,它会请求内存,操作系统会将它提供给您的进程。 然而,在程序使用虚拟内存之前,您还可以访问另外1个gig(可能并不总是得到3gig,这取决于您的硬件外设)。

正如marc Gavell指出的那样,您可能需要运行命令“editbin / LARGEADDRESSAWARE my.exe”作为exe的后期构建选项来启用它。 找到一个MS的人在这里谈论它的参考: MS论坛

我建议你看看你的程序,看看你是否可以重新构建它使用更少的内存。 也许你可以用更小的块来处理一个数据集,而不是一次把所有的东西加载到内存中?

您还应该增加进程的最大工作集大小:请参阅SetProcessWorkingSetSize API。

那么,我不确定这一点,但这是我的想法:

.NET可执行文件可以通过两种方式编译 – 独立于平台和平台。 认情况下,它们是平台独立的,代码是(正如其他答案中所提到的)在运行程序时接受平台特定的代码

现在,例如,如果您的可执行文件是这些独立于平台的文件之一,并且在64位操作系统上运行,那么它将被打乱到64位代码,对不对? 因此,它将能够解决更多的3GB的RAM。

我想说的是 – 我不认为这是什么写在PE头什么。 可用内存的实际数量由.NET运行时决定,而运行时则依次查看当前平台并生成最佳的JIT代码

我认为你不应该担心/ 3GB开关,因为.NET会为你处理。 信任.NET!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐