C# .NET内存不足异常-使用了1.3GB,但安装了16GB
当应用程序的内存使用量超过1.3GB时,我的C#应用程序出现内存不足异常 我在一台有3GB内存的32位机器上也遇到了同样的问题,这在当时是有道理的。但是现在我使用高端主板和高端RAM将硬件升级为一台64位机器,内存为16GB,但在1.3GB之后仍然会出现内存不足异常 我知道没有超过2GB的单个对象,而且1.3无论如何都小于2GB,因此单个对象上内置的MS 2GB限制不太可能成为问题 当应用程序达到某个内存使用阈值时,似乎存在某种Windows kill开关。然后应该有一种方法来配置它。它可能在登记处吗C# .NET内存不足异常-使用了1.3GB,但安装了16GB,c#,.net,out-of-memory,C#,.net,Out Of Memory,当应用程序的内存使用量超过1.3GB时,我的C#应用程序出现内存不足异常 我在一台有3GB内存的32位机器上也遇到了同样的问题,这在当时是有道理的。但是现在我使用高端主板和高端RAM将硬件升级为一台64位机器,内存为16GB,但在1.3GB之后仍然会出现内存不足异常 我知道没有超过2GB的单个对象,而且1.3无论如何都小于2GB,因此单个对象上内置的MS 2GB限制不太可能成为问题 当应用程序达到某个内存使用阈值时,似乎存在某种Windows kill开关。然后应该有一种方法来配置它。它可能在登
任何帮助都将不胜感激 看起来您有一个64位的arch,很好——但是有一个32位版本的.NET运行时和/或32位版本的Windows 因此,进程可用的地址空间仍然是相同的,它没有改变您以前的设置
升级到64位操作系统和64位.NET版本;) 在编译到相同的目标体系结构之前,没有任何区别。我假设在这两种情况下编译的都是
32
位体系结构
值得一提的是,如果在(比如)两种体系结构32
和64
位上获得单个集合分配的2GB
内存,也可以提高这一性能
为了能够从
64
位体系结构的内存优化中获益,您必须编译针对64
位体系结构的代码。在这之后,自然地,您的二进制文件将只在64
位上运行,但将受益于RAM中有更多可用空间的可能性。您的应用程序是作为64位还是32位进程运行的?
您可以在任务管理器中对此进行检查
它可能是,它以32位运行,即使整个系统是以64位运行
如果是32位,则可能是第三方库导致了这种情况。但首先要确保您的应用程序是为“任何CPU”编译的,如评论中所述。如前所述,在x64中编译应用程序可以为您提供更多可用内存 但如果必须在x86中构建应用程序,有一种方法可以将内存限制从1,2GB提高到4GB(这是32位进程的实际限制): 在Visual Studio安装目录的VC/bin文件夹中,必须有一个
editbin.exe
文件。因此,在我的默认安装中,我在
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\editbin.exe
为了使程序工作,可能必须首先在同一目录中执行vcvars32.bat
。然后
editbin/largeaddressware
足够让您的程序使用4GB RAM
是在编译项目时生成的exe
如果希望在每次编译项目时自动执行此行为,请对已执行的项目使用以下生成后事件:
if exist "$(DevEnvDir)..\tools\vsvars32.bat" (
call "$(DevEnvDir)..\tools\vsvars32.bat"
editbin /largeaddressaware "$(TargetPath)"
)
旁注:同样可以使用
devenv.exe
让Visual Studio也使用4GB RAM而不是1.2GB(但首先备份旧的devenv.exe
)。值得一提的是,“任意CPU”编译的默认值现在选中了“首选32位”复选框。如果设置为AnyCPU,则在具有16gb RAM的64位操作系统上,如果选中此选项,仍可能出现2gb的内存不足异常
如果您有32位窗口,如果没有以下设置,此方法将无法工作
if exist "$(DevEnvDir)..\tools\vsvars32.bat" (
call "$(DevEnvDir)..\tools\vsvars32.bat"
editbin /largeaddressaware "$(TargetPath)"
)
更多信息-command
increaseuserva
:如果您在较新版本的Visual Studio(2017、2019)中搜索工具文件夹,我将其置于
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\Tools
并且文件名为VsDevCmd.bat来自Visual Studio 2017及更高版本。您的操作系统也是64位的吗?即使您的操作系统是64位的,也要确保您的进程也是64位的(或AnyCPU)。是的,AnyCPU也是一个选项,您可以选择JIT体系结构相关的代码。但在您拥有非托管(比如)资源的情况下,针对特定体系结构仍然可以受益。我不知道OP的架构是关于什么的。我知道:)-谢谢Tigran,我用x64重建了解决方案,异常消失了。非常感谢。这对我有用。但是,在将内存限制提高到4GB之后,我们是否发现了任何问题。这绝对解决了我的内存不足问题,并为我们节省了大量的挫折