asp.net – 32位池和64位池之间的内存使用情况

我们有一个ASP.NET应用程序,围绕MonoRail和NHibernate构建,并且我注意到,如果使用64位模式或32位模式运行它,就会发生一个奇怪的行为。一切都编译为Anycpu,并且两种模式都可以正常运行,但内存使用情况却有很大差异。

看看ANTS的以下快照:

32bit_snapshot:

VS

64bit_snapshot:

两个快照的使用场景几乎相当(我在两次运行中都打到相同的页面)。

首先,为什么64位模式下Unused内存如此之高?为什么非托管内存是64位模式下的大小的4倍?

任何对此的洞察将是非常有帮助的。

解决方法

64位进程的初始内存分配远远高于同等32位进程的内存分配。

从理论上说,垃圾收集运行的频率要低得多,这样可以提高性能。它也有助于碎片化,因为一次分配更大的内存块。

本文:http://blogs.msdn.com/b/maoni/archive/2007/05/15/64-bit-vs-32-bit.aspx给出了更详细的解释。

您看到的非托管内存使用率可能更高可能是因为以32位模式运行的.NET对象使用最少12个字节(8字节4字节引用),而64位中的相同对象将占用24个字节(12个字节8字节参考)。

另一篇文章更全面地解释:http://www.simple-talk.com/dotnet/.net-framework/object-overhead-the-hidden-.net-memory–allocation-cost/

相关文章

项目要求通过网站上传大文件,比如视频文件,通过摸索实现了文件分片来上传,然后后台进行合并。 使用了...
安装新版本的Nginx(vim /etc/yum.repos.d/nginx.repo) [nginx-stable] name=nginx stable repo baseu...
什么是 SignalR ASP.NET Core ASP.NET Core SignalR 是一种开放源代码库,可简化将实时 web 功...
在Windows下使用Docker,我们选择Docker Desktop这个软件,非常方便。 ## Docker Desktop介绍及安装 Do...
项目开始设计的是运行在windows下,所以一开始采用的是windows服务模式来获取多媒体文件信息,后来要求...
银河麒麟高级服务器操作系统V10是针对企业级关键业务,适应虚拟化、云计算、大数据、工业互联网时代对主...