我们有一个.NET应用程序,我们的客户认为这是太大的大规模部署,我们希望了解什么有助于我们的内存占用,并且有可能做更好的没有完全放弃.NET和wpf.

我们有兴趣改进总大小和私人工作集(pws).在这个问题上,我只想看看pws. VMMap通常报告一个105 mb的pws.这11MB是图像,31mb是堆,52 mb是托管堆,7 mb是私有数据,其余是堆栈,页表等.

这里的最大奖是托管堆.我们可以直接在我们自己的代码(即我们创建和管理的对象和窗口)中占用约8mb的堆放堆.其余的是由我们使用的框架的元素创建的可能的.NET对象.

我们想要做的是确定框架帐户的哪些元素,这些用法的一部分可能会重建我们的系统,以避免在可能的情况下使用它们.任何人都可以建议如何进行这项调查?

进一步澄清:

目前为止,我已经使用了一些工具,包括优秀的ANTS Profilers和WinDbg与SOS,他们允许我看到托管堆中的对象,但这里真正的兴趣不是“什么?”,而是为什么? “理想情况下,我想说可以这样说:“因为我们使用WCF,所以在这里创建了10万个对象,如果我们编写自己的本地运输,那么我们可以节省8MB的x品质风险和开发工作.”

在300,000个对象上执行gcroot是不可能的.

解决方法

WinDbg可能是一个有用的工具.随附 Debugging Tools for Windows.

运行应用程序后,您可以附加WinDbg并浏览托管堆. (或者您可以进行内存转储并离线浏览).它将能够很快地告诉您消耗最大内存量的对象类型.

首先,您将需要加载启用托管应用程序调试的SOS扩展:

.loadby sos mscorwks

然后,您可以使用!dumpheap获取堆信息,-stat开关给出分配哪些类型的整体堆信息:

!dumpheap -stat

-type参数给出了指定类型的分配实例的特定信息:

!dumpheap -type System.String

有一些其他的命令,你可能会发现如下:

>!gcroot – 跟踪分配的对象备份它的根找到为什么它在内存中.
>!dumpobj – 转储一个特定的对象,以便您可以看到它的内容.
>!EEHeap – 给出一些一般的堆数据.

MSDN有一个full list of SOS commands及其交换机.

WinDbg是一个非常复杂的工具,但是如果您搜索帮助您开始使用,则会有许多在线教程和指南.或者,我可以推荐John Robbins的这本书Debugging Microsoft .NET 2.0 Applications,该书在WinDbg和SOS的.net调试功能中有一些很好的细节.

您可以将SOS扩展加载到visual studio中,而不是将其输入到即时窗口中,那么您应该可以直接在VS立即窗口中使用SOS命令:

.load SOS.dll

您也可能会发现CLR Profiler和Usage guide有帮助.

如何在.NET应用程序中探索托管堆来识别可能的内存优化?的更多相关文章

  1. 详解Android内存优化策略

    这篇文章主要介绍了详解Android内存优化策略,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. Android内存优化操作方法梳理总结

    这篇文章主要介绍了Android 内存优化知识点梳理总结,Android 操作系统给每个进程都会分配指定额度的内存空间,App 使用内存来进行快速的文件访问交互,长时间如此便需要优化策略,文章分享优化知识点总结,需要的朋友可以参考一下

  3. 详解Android内存泄露及优化方案

    这篇文章主要介绍了详解Android内存泄露及优化方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  4. 浅谈Android性能优化之内存优化

    Android的内存优化是性能优化中很重要的一部分,本文将详细介绍Android性能优化之内存优化。

  5. cocos2d-x 优化(纹理渲染优化、资源缓存、内存优化)

    概述包括以下5种优化:引擎底层优化、纹理优化、渲染优化、资源缓存、内存优化引擎优化2.0版本比1.0版本在算法上有所优化,效率更高。在处理动画时,对内存优化也是很好的方案。内存优化资源占用的内存优化如前面几个小节所述内存池方案游戏启动的时候就分配很大的一块区域,游戏运行过程中不释放,直到退出游戏再释放。平时不是为新资源分配内存,而是把资源加载到内存池里面。

  6. cocos2d-x --内存优化之使用16位纹理/NPOT

    使用16-bit纹理最快速地减少纹理内存占用的办法就是把它们作为16位颜色深度的纹理来加载。cocos2d默认的纹理像素格式是32位颜色深度。cocos2d默认的颜色深度将会把所有的纹理都渲染到16位的colorframebuffer里面,然后再显示到你的设备屏幕上面。.在cocos2d1.x的时候,你必须在ccConfig.h文件中开启对NPOT的支持,但是,cocos2d2.x就不需要了,它默认是支持NPOT的。所有3代以后的ios设置都支持cocos2d2.x,所以也都能支持NPOT纹理。而且你可以

  7. Cocos2d-x --内存优化二之图片资源管理方案

    2D游戏中最占内存的就是图片资源了,在实际项目中发现图片使用不同的纹理格式带来的性能差异巨大,下表是我在IOS平台一个小Demo中的测试结果,该Demo的原始内存占用是7M,测试方法是一次性加载5张2048*2048的图片,使用TexturePacker工具生成图片,内存统计使用Instrument工具,加载时间统计用-X引擎提供的CCTime类,单位是微秒。

  8. cocos2dx内存优化

    为了减少内存警告,这里我们给出两个普遍的关于cocos2dx游戏内存优化的指导原则。因为我们在cocos2dx引擎上开发游戏,引擎自己就提供了很多可选择的优化方案。使用cocos2dx引擎内存管理工具并且尽最大努力避免内存泄露。

  9. Cocos2dx的内存优化总结

    1加载图片过程优化问题:以cocos2dx2.x为例,创建精灵CCSprite的过程中会创建一个CCImage,所以短时间会占用2倍内存,所以应避免连续加载。根据牛人的说法,普通纹理过程中会产生2倍自身的内存,jpg又由于多一步转化,需要3倍自身内存大小的内存。解决:1、cocos2dx默认把所有纹理渲染成16bit的,所以最好用16bit的纹理。eg:CCSprite*pBg=CCSprite::create;.....CCTextureCache::sharedTextureCache()->remo

  10. cocos2dx 教程收藏

    一、地图相关1、瓦片地图TiledMap二、内存管理1、内存管理机制,以及内存优化建议2、Cocos2d-x3.2中的三种缓存类三、特殊效果1、视差节点ParallaxNode2、发光的标题四、功能扩展1、Cocos2d-x二维码图片的实现2、创建C++自定义类让Lua脚本调用3、cocos2dx集成SQLite数据库在Cocos2d-x中使用SQLlite数据库4、cocos2dx热更新功能的实现5、cocos2dx与Android混编实现换“头像图片”6、Cocos2dx资源加密实现7、BmFont制

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部