Windows中的任务管理器:内存选项卡

问题描述 投票:0回答:1

我创建了非常简单的程序,并将我的计算机设置为具有有限数量的虚拟内存。 32GB RAM和4GB虚拟内存。然后我制作了C#代码来消耗所有的.NET内存。

List<HeapSizeAllocation> hsaList = new List<HeapSizeAllocation>();

public class HeapSizeAllocation
    {

        int[] _arr;
        int s1Gb = ( 1024 * 1024 * 1024) /sizeof(int); //1GB = 1024MB 1MB= 1024Kb 

        public void Test()
        {

            //Test simple array allocation
            _arr = new int[s1Gb * 2];

        }
    }

单击()=>重复,直到OutOfMemory Thrown

 HeapSizeAllocation hsa = new HeapSizeAllocation();
                hsaList.Add(hsa);

                hsa.Test();

然后我在Windows中打开任务管理器,我仍然看到21 GB免费,只有10个在使用。为什么? qazxsw poi

c# windows memory garbage-collection out-of-memory
1个回答
1
投票

通过“系统属性”设置指定的4 GB实际上是允许的页面文件的大小。不幸的是,该设置被称为“虚拟内存”,因为它会导致虚拟内存概念的真正含义混淆。

需要牢记的两件重要事情:

  • 由于默认的enter image description here默认设置,在x64 Windows框上使用Visual Studio构建的C#项目的进程的默认虚拟地址空间将限制为4 GB。您必须更改此设置(例如,为x64平台编译)以查看更多正在使用的内容
  • 只要您只分配数据,但不以任何方式触摸它,工作集(即您的数据实际使用了多少RAM)将保持相当低

我专门针对您引用的场景编写了一篇文章(内存不足,内存充足,但仍有大量内存可用)Platform target。它详细解释了一些事情。

© www.soinside.com 2019 - 2024. All rights reserved.