




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.NET Memory Profiler 使用手册1 简介.Net Memory Profiler(以下简称Profiler):专门针对于.NET程序,功能最全的内存分析工具,最大的特点是具有内存动态分析(Automatic Memory Analysis)功能。2 安装3 使用方
2、法Profler可以调试4种类型的.NET程序,分别为:l 桌面应用程序l WPF程序l ASP.NET程序l .NET Service程序对应选择软件的文件菜单如下Profler调试共有三种方式选择:l 启动跟踪(Profiler Application)选定对应的调试方式,如调试桌面程序,选中Profiler Application,然后选择需要启动的执行文件,Profiler将作为宿主程序启动程序开始实时监控内存.l 附加进程(Attach Process)
3、将Profiler附加到指定的进程上,此时不能实时监控内存情况,只能够收集内存镜像.l 导入内存镜像(Import Memory Dump)可以选择dmp为后缀的内存镜像文件,比如Windbg以及DebugDiag导出的镜像文件,此时不能实时监控内存情况,只能够收集内存镜像且不能跟踪非托管资源.3.1 软件设置为了加快Profiler分析内存类型实例的速度,需要设置程序的符号路径即(Symbol File Locations),进入菜单Tool->Options->Preferences->Symobl Fi
4、le Locations,得到弹出菜单如下图.选中”Retrive Debug Symbols .”选项,该选项是为了将被调试程序需要的PDB符号文件从Http:/ Symbols file locations”选项.注:如果选择了从微软网站下载符号会影响调试程序的启动时间,建议使用本地符号集缓存3.2 操作说明3.2.1 启动程序首先,选择需要调试类型,调试ZLBH桌面程序,选择 Profiler Application,选择好需要启动的程序exe文件.如果需要设置启动参数,则设置好命令行参数以及工作目
5、录.选择”Next”进行收集数据的一些选项设置,一般直接按”Star”按钮开始调试程序.3.2.2 收集数据选择菜单栏的收集按钮,收集堆数据,第一个为收集全部堆上的数据,第二个为只收集第0代的数据.3.2.3 重新启动和停止调试完毕后通过停止按钮跟踪程序,通过启动按钮重新启动上一次的调试程序.-启动-停止3.2.4 查看收集数据Profiler上有6个页卡,分别为:l Type/Resource 类型/资源页卡l T
6、ype/Resource Details类型/资源明细页卡l Instance Details 实例明细页卡l Call Stacks/Methods调用堆栈页卡l Navtive Memory 本地内存页卡l Real-Time-实时跟踪页卡 Type/Resource 类型/资源页卡类型/资源页卡,可以看到当前收集的内存快照的实例数/实例字节数等信息.通过类型/资源网格的上部可以过滤出需要的
7、信息,共有四个地方可以过滤,从左到右分别为:l 资源类型托管资源 非托管资源l 警告类型Profiler自动分析的内存问题警告类型l 命名空间类型的命名空间l 类型名称按输入过滤类型名称类型的过滤还可以通过,”Show type/Resource”下拉框过滤出所有的已有类型.“Show hierarcical”通过命名空间分类显示类型和资源.Live Instances 列显示当前活动的实例数Total:总共建立的实例数New:新建的实例数
8、Remved:已经销毁的实例数Delta:New Removed,新建和销毁数的差值.Comparison SnapShop:另一个用来比较的内存快照来比较两个快照的差别 Type/Resource Details类型/资源明细页卡通过在Type/Resource视图中选中某个类型则显示类型资源的明细信息,包括该类型下所有的类型实例.左侧包括的信息包括:l 是否新建的实例l 实例号l 被引用的次数l 实例所占用的内存大小l&
9、#160; 实例的代信息l 实例的子级对象所占用的内存大小右侧包含Allocation Stacks和Shortest Root Paths,如果不是实时跟踪,则没有Allocation Stacks页卡.l Allocation Stacks显示的是Win32调用路径l Shortest Root Paths 显示的是从根对象到当前实例的引用路径,查看顺序从下往上,为根到实例的路径. Instance Details
10、0;实例明细页卡通过点击Type/Resource Details类型/资源明细页卡上的单个实例,显示这个实例的明细信息,显示的主要内容包括:l Referenced By 被引用的关系l References 引用的关系l Field Value 属性的值 Call Stacks/Methods调用堆栈页卡显示调用及方法堆栈,可以选择只包含托管代码和非托管代码显示方法所调用的函数及被调用的函数关系,如图:
11、0; Navtive Memory 本地内存页卡用于显示进程的本地内存信息,本地内存是被操作系统管理的内存,而不是CLR管理的内存。 Real-Time-实时跟踪页卡如果通过Profiler Application调试程序,则能够显示出Real-Time页卡,主要内容有:l Graph and Statistics通过图形显示实时的内存分配情况,包括:总共实例数、存货实例数、Disposed实例数等l Type/Resources实时的显示出类型和资源信息,并显示最后一次
12、gc存活的实例数以及总共的实例数。3.2.5 自动内存分析.NET Memory Profiler分析工具能够根据内存镜像以及实时跟踪进行自动内存问题分析,提供6个严重级别的提示,分别为严重警告、警告、轻度警告、间接警告、建议、提示。其中对应的严重级别又会有不同的原因分类提示:严重警告Potential Memory Leak潜在的内存泄漏 Disposed instance with direct EventHandler roots实例已Disposed但有直接的EventHandler根一个Disposed的实例直接被一个EventHandle
13、r根化,这个实例只能通过代理访问到Disposed instance with direct delegate roots实例已Disposed但有直接的Delegate根 Undisposed instances (release resource, no finalizer)没有被Disposed的实例一个Disposable实例被GC回收,但是因为没有finalzier方法而没有正确的Dispose,从未导致外部的非托管资源没有被释放掉警告Direct EventHandler roots被一个EventHandler直接根化一个实例直接被一个EventHandler根化,需要
14、检查这个实例以及这个EventHandler实例,是否实例被EventHandler把持Disposed instance被Disposed的实例一个实例虽然被Disposed但是还是标记为可到达(Reachable),需要进一步检查该实例是否是活动的(alive)Undisposed instances (release resource and remove external references)没有被Disposed的实例一个实例被GC回收,但是没有dispose,Disposable类型的实例由于没有Dispose,导致非托管资源以及外部引用不能被移除Undisposed insta
15、nces (release resource)没有被Disposed的实例Undisposed instances (remove external references)没有被Disposed的实例轻度警告Direct delegate roots直接被代理所根化一个Disposed的实例直接被一个Delegate根化,这个实例只能通过代理访问到Pinned instance被钉住的实例钉在内存中的对象因为实例不能移动,会影响GC回收效率间接警告Disposed instance with indirect EventHandler roots已Disposed的对象被EventHandle
16、r间接根化 Indirect EventHandler roots非直接被EventHandler所根化 Disposed instance with indirect delegate roots已Disposed的对象被Deletegate间接根化 Indirect delegate roots非直接被代理所根化 建议Undisposed instances (perform action)没有被Disposed的实例实例被回收,但是没有正确的Dispose,实例在Dispose的过程中,需要执行一些Exit或Clearup操作,包括:写数据到文件、
17、提交或回滚事务、清除缓存、删除临时文件等Undisposed instances (memory/resource utilization)实例在Dispose的过程中需要Dispose其他实例,比如:释放COM接口、suppress finalization提示Large instance大型实例对象需要存放到大对象堆的实例Undisposed instances (clear references)没有被Disposed的实例Dispose实例需要清空其他实例的引用的操作,但是没有执行Undisposed instances (no action) Undisposed inst
18、ances (unclassified) 4 常见内存问题4.1 使用了非托管资源的类非托管资源的类是指本身是被CLR管理的,而且其管理的非托管资源也可以被CLR自动回收,因为CLR只能跟踪非托管资源的生存期,但是不能主动去做GC,所以GC的时机不确定,所以在使用完后应及时释放。例如:调用FileStream FileStream file = new FileStream("c:Test.txt", F
19、ileMode.Open); 连续两次调用程序会报“文件正在使用中”的异常,如果两次调用中间调用强制回收,则不会报异常。再例如:使用ODP.NET的OracleCommand和OracleDataReader,在Close后还需要Dispose;OracleCommand cmd = new OracleCommand();cmd.CommandText = sbSQL.ToString();cmd.Connection = conn;cmd.Parameters.Add(p1);OracleDataReader dr = cmd.ExecuteReader(
20、);if (dr.Read() /dr.Close(); else dr.Dispose();cmd.Dispose();常见的使用了非托管资源的类如下:ApplicationContextComponentComponentDesignerBrushContainerContextCursorFileStreamDataSetFontIconImageMatrixTextureOdbcDataReaderOleDBDataReaderPenRegexSocketStreamWriterTimerTran
21、sactionDataReaderPingTooltipBitmapSerialPort以上列出的类均继承了IDisposable接口,需要在使用完后调用Dispose方法释放或者使用Using语句块,比如DataTable、DataSet、DataReader、Transaction、BitMap4.2 Win32API及COM指通过本地API函数与托管对象进行交互(比如:通过 P/Invoke方式调用本地DLL,DLLImport声明静态外部函数和COM Interop)所用到的非托管资源。例如:当通过DLL Import调用 API函数GetDC函数时忘了调用ReleaseDC去释放设备句柄造成4个字节的内存泄漏。再如:智能文档中使用的Word以及导出EXCEl功能用到的Office的COM非托管组件,在关闭时GC不能识别COM组件而造成有时候无法对COM对象进行释放,这时候可以通过以下两个InteropServices函数进行释放l System.Runtime.InteropServices.Marshal.ReleaseComObject(comObject);递减与指定的 COM 对象关联的指定 运行时可调用包装
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 酒店经营管理师的市场洞察力提升试题及答案
- 交通管理的技术手段与挑战试题及答案
- 酒店经营管理师行业动态观察试题及答案
- 2024年商务礼仪师考试的考生心态试题及答案
- 2024年焊接工程师资格考试应对策略试题及答案
- 质量工程师考试问题清单试题及答案
- 2024年广西百色干部学院招聘教研人员笔试真题
- 语言治疗个案康复
- 基于ARCS的高中信息技术项目式设计与实践研究
- 脑梗死溶栓治疗效果
- ISOTS 22163专题培训考试
- 六年级下册数学课件-第4单元 比例 整理和复习 人教版(共21张PPT)
- JJF(鲁) 142-2022 称重式雨量计校准规范
- Adobe-Illustrator-(Ai)基础教程
- 程序的运行结果PPT学习教案
- 圆柱钢模计算书
- 合成宝石特征x
- 查摆问题及整改措施
- 年度研发费用专项审计报告模板(共22页)
- 隧道工程隧道支护结构设计实用教案
- 得力打卡机破解Excel工作表保护密码4页
评论
0/150
提交评论