你可以通过将应用程序构建为64位架构来分配比 ~2 GB 更多的内存,这需要在Visual Studio中创建一个新的构建配置,并且该应用程序的构建仅在64位Windows版本上运行。在.NET中,对于应用程序使用默认的“任何CPU”构建选项,我发现即使在64位Windows机器上,我只能从堆中分配约1.5 GB的内存,这是因为应用程序实际上只在“任何CPU”模式下构建时以32位模式运行。但是通过编译为x64架构,您可以在执行应用程序期间从堆中分配更多的内存,我将解释如何为您的应用程序创建x64构建:
如果在.NET项目中使用普通(默认)的“Any CPU”构建选项,则你的应用程序将始终在32位模式下运行,即使在64位Windows操作系统上也是如此。因此,在应用程序执行期间,你将无法分配超过大约1.5到2 GB的RAM内存。要以真正的64位模式运行.NET应用程序,你需要进入构建配置管理器,并为x64架构创建一个构建类型,然后明确地使用该构建类型重新编译程序,以便进行x64编译。可以使用以下步骤为.NET解决方案创建x64构建模式选项:
在Visual Studio的“解决方案资源管理器”窗格中,右键单击解决方案图标,从弹出菜单中选择“配置管理器”选项。这将为.NET解决方案文件打开构建“配置管理器”对话框窗口。
在构建“配置管理器”对话框的右上方,单击下箭头并选择“<new>”选项。这将打开“新建解决方案平台”对话框。
在“新建解决方案平台”对话框中,对于“平台”选项,请从下拉菜单中选择“x64”。然后单击“确定”按钮,新的x64构建选项现在将在配置管理器对话框中可用。
然后,在“配置管理器”对话框中,在“活动解决方案平台”下拉菜单中选择“x64”。然后单击“关闭”按钮。
在Visual Studio的“解决方案资源管理器”窗格中,右键单击CS项目图标,并从弹出菜单中选择“属性”选项(此菜单底部的最后一个选项)。这将打开CS项目属性窗口。
在CS项目属性窗口的左侧,单击“生成”选项卡以显示代码项目的生成属性。在此窗口的顶部,请注意“平台”现在应该说“x64”(而不是默认的“任何CPU”选项)。如果“平台”下拉菜单没有显示“x64”,则现在应该选择它。
然后只需构建您的代码,在“bin”文件夹中,您现在应该有一个包含新的64位应用程序构建的x64文件夹。
在64位Windows操作系统上使用64位版本的应用程序将允许您的程序分配比约2GB更多的内存,假设您有可用的RAM和磁盘空间(这是撰写此响应时的真正限制因素),理论上可以达到2^64地址空间。
如果您的应用程序仍然耗尽内存,您还可以增加Windows内存页面文件的大小。在Windows上,页面文件允许操作系统将内存从RAM转移到磁盘,如果它的RAM内存空间不足。但是,在将RAM内存部分从磁盘中移动回来的过程中,会有很大的时间成本,因此可能会对应用程序的性能产生实际影响。无论性能如何,通过增加页面大小,您可以(理论上)使页面文件的大小与Windows机器C:驱动器上的可用空间一样大。在这种情况下,您的应用程序将能够在执行程序期间分配例如高达4TB的内存(或者您的页面文件大小设置为任意数量的内存)。要更改Windows机器的页面文件设置,请执行以下操作:
-
右键单击“This PC”,选择弹出菜单中的“属性”选项,打开“系统属性”对话框。在后续版本的Windows(Windows 10、Win 2012 Server等)中,也可以通过“开始”>“控制面板”>“系统和安全”>“系统”来实现。
-
在“系统”对话框的左侧,单击“高级系统设置”选项。这将显示Windows遗留的“系统属性”对话框的“高级”选项卡。
-
在“系统属性”对话框的“高级”选项卡中,单击“性能”框中的“设置”按钮。这将打开“性能选项”对话框。
-
在“性能选项”对话框中,单击“高级”选项卡,以查看Windows内存页面文件的当前大小设置。
-
要增加页面文件大小,请单击“更改”按钮,将打开“虚拟内存”对话框。
-
在“虚拟内存”对话框中,选择“C:”驱动器,然后在“自定义大小”下设置“初始”和“最大”大小。您可以使用任何大小,但不能超过C:驱动器上的可用空间,但是此更改将为硬盘上的页面文件保留该空间。
-
然后单击所有对话框上的“确定”以提交新设置。然后重新启动计算机,以确保所有更改已正确完成,并且新的页面文件设置正在运行。
无论如何,我希望这可以帮助人们理解为什么他们在运行 .NET 应用程序时,即使在 64 位 Windows 机器上运行,也可能遇到 1.5-2 GB 内存限制问题。这对人们来说可能是一个非常令人困惑的问题,我希望我的解释是有意义的。如果需要,欢迎随时向我发送有关此答案的问题。