【发布时间】:2018-09-12 05:46:11
【问题描述】:
我接管了一个将 3D 模型加载到内存中的 C# 项目,因此我需要使用大内存。我的平台是64位win10,C#程序是32位,使用Visual Studio 2013开发。我的笔记本电脑有 8GB 内存。
在我使用editbin /largeaddressaware $(TargetPath)给C#程序添加LARGE_ADDRESS_AWARE标志之前,它只能消耗大约1GB的内存然后程序抛出OutOfMemory异常,添加LARGE_ADDRESS_AWARE标志后,它可以消耗大约1.5GB的内存。
我知道在 64 位平台上运行的 32 位进程上使用 LARGE_ADDRESS_AWARE,内存限制为 4GB。我也看过一些文章,说因为.NET后端工作和内存碎片,进程并不能真正分配内存到4GB。
但是我觉得1.5GB对4GB来说太远了,所以我想问一下还有没有其他因素会导致内存使用限制?谢谢你的回答。
【问题讨论】:
-
.NET 将对象大小限制为最大 2 GB,即使在 64 位平台上也是如此。 stackoverflow.com/questions/4312169/net-object-size-limit
-
@MitchWheat 我知道。但我确信该程序不会创建 GB 级别的对象。
-
@MitchWheat 你说得对,我撤回了我的评论,意识到这不适用于单个对象。
-
您正在查看错误的内存统计信息,通常是由于假设任务管理器提供了良好的信息。它显示 RAM 使用情况,与此问题无关。它可以显示相关的,添加“提交大小”列。那一个很好地代表了虚拟内存分配大小。
标签: c# memory out-of-memory 32-bit