Unmanagedmemorynotshowingupintaskmanager我写了下面的测试(实际使用范围更广)IntPtrx=Marshal.AllocHGlobal(100000000);Console.Write("按任意键继续...");控制台.ReadKey(true);元帅.FreeHGlobal(x);控制台.ReadKey(true);它没有显示按键前分配的100兆字节的任何迹象吗?如果这是设计使然,我还能如何测试非托管堆内存的消耗?您将了解操作系统的工作原理。此行为并非特定于Marshal.AllocHGlobal(),请尝试以下代码:staticvoidMain(string[]args){vararr=newbyte[100000000];控制台.ReadKey(true);默认情况下,任务管理器会显示您使用了多少RAM。但是,与许多其他操作系统一样,您的操作系统是一个请求分页的虚拟内存操作系统。你没有要求任何东西。您所做的就是分配虚拟内存。它只是地址空间,在这个测试中仍然是虚拟的,只是处理器的数量。每一个4096字节。在您实际访问数组之前,该要求不会发生。添加:for(intix=0;ixBam,现在你看到它缩放了。不一定是100兆字节,但现在大多数机器都有足够的RAM,不需要将任何页面交换回页面文件以提供足够的存储空间。否则一个很好的提醒为什么任务管理器不是一个很好的内存分析器。你的程序消耗多少RAM是无关紧要的。如果你使用太多,那么你会注意到它并且你的程序会变慢。任务管理器可以显示副作用原来的代码,你必须添加“committedsize”列。在早期的Windows版本中,模糊内存的命名方式不同,我认为是VM大小。Committedsizemeasurementpage文件中保留的空间量.backing存储地址空间,保留以便在操作系统需要取消映射页面以在其他地方提供RAM时存储RAM内容。Windows不允许内存被过度使用,这是您在64位程序中获得OOM的方式,因为它不能足够快地增长页面文件。以上就是C#学习教程:非托管内存不显示在任务管理器分享的全部内容。如果对大家有用,需要了解更多C#学习教程,希望大家多多关注---本文来自网络收集,不代表立场,如涉及侵权,请点击有权联系管理员删除。如需转载请注明出处:
