我希望在针对x64构建应用程序时看到System.OutOfMemoryException和任务管理器中消耗的内存。应用程序属性的Build选项卡中有两个下拉菜单:“Platform target”和“Platform”,两者都设置为x64。
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<long> lst = new List<long>();
while (true)
{
lst.Add(long.MaxValue);
}
}
}
}
它确实显示OutOfMemoryException ...但是当它停止时,任务管理器显示的数字为1587443K,这是1.5GB,如果它是针对x86构建的,我期望它。 是的,操作系统是64位。
我忘记了别的什么吗?
答案 0 :(得分:5)
我忘记了别的什么吗?
是的 - 在.NET 4中,仍然存在每个对象2GB的限制。 (您可以使用更多内存,但不能在单个对象中使用。)我怀疑您的列表需要重新分配其内部缓冲区,在单个阵列中需要~3GB。
如果您设置.NET 4.5 supports larger objects配置参数,可能会听到<gcAllowVeryLargeObjects>
。