博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.NET性能分析最佳实践之:如何找出使用过多内存的.NET代码(基础篇)
阅读量:6913 次
发布时间:2019-06-27

本文共 1574 字,大约阅读时间需要 5 分钟。

 .NET性能分析最佳实践之:如何找出使用过多内存的.NET代码(基础篇
       在.NET应用中一个常常影响性能的因素就是代码消耗了过多的内存。很多的开发人员在编写代码的过程中常常不会关注性能,从而使得应用程序中到处存在性能瓶颈。很多的时候,开发人员关注的总是代码的执行时间的长短,而把真正的性能问题丢掉了一边。在本篇文章中,我们将会找出代码中的哪些功能消耗了多少内存。
              
本篇文章比较简单,我们会主要详细的介绍CLR Profiler这个工具。
 
 系列文章:
 
 
 
本篇议题如下:
基础篇:详解介绍Profiler的使用
进阶篇:调用Profiler的API进行
 
基础篇:详解介绍Profiler的使用
       大家可以从这里从微软的下载CLR Profiler。一旦下载CLR Profiler之后,我们就可以解压,然后运行Bin文件夹中的“CLRProfiler.exe”。
首先我们来介绍一下CLR Profiler的功能。
 
       CLR Profiler确实是一个不错的工具,通过使用它,我们可以了解一个.NET应用程序到底是如何使用内存的,基本上面它的功能可以分为两类,如图所示:
 
 
1. 对一个.NET应用中的内存是如何分配的给出一个完整的描述。所以,我们可以看到每一种类型,方法所占用的内存情况。
2. 它告诉我们一个方法被调用了多少次。
 
       这里需要注意的就是:不要再生产环境或上面的服务器站点中运行CLR Profiler,因为它会严重的影响程序的影响。例如,如果我们的应用程序中包含两个方法,fun1和fun2,此时当我们运行CLR Profiler的时候,它会将一些逻辑注入到应用程序中,通过下面的一个图就可以很清楚的看出这个问题:
 
 
 
说了这么多,我们还是来看看,如何使用CLR Profiler。
 
       首先,在使用CLR Profiler之前,我们要清楚:要使用这个工具来干嘛?基本上,有两点理由:查看内存的分配与使用的情况;查看方法被调用次数。
启动了CRLProfiler.exe之后,选择要检查的程序,如下图:
 
 
 
此时,应用程序就开始运行,我们就可以在Profiler中看到一些信息,例如应用程序占用的内容,每一代对象占用的大小等,如下:
 
 
 
       其实上面的那个应用程序非常的简单,只是作为一个demo演示而言。上面的程序的功能就是在一个按钮的事件中调用了两个方法:UseSimpleStringsUseStringBuilders。这个两个方法都是在拼接字符串(这也是常常被用来做例子的一个场景),我们分别让它们拼接1000个字符串,如下:
 
 
 
其中UseSimpleStrings如下:
 
 
UseStringBuilders如下:
 
       现在,我们可以尝试着使用Profiler去看看每个方法使用多少的内存。我们在程序中点击按钮,好让Profiler去收集信息。然后,我们在点击Profiler的“histogram”按钮,此时我们就可以看到程序中的每一种类型的内存占用情况,如下:
 
 
如果我们想看每一个方法在运行过程中占用的内容,可以点击“Allocation Graph”,如下:
 
 
通过这个操作,我们可以看到下面的图:
 
 
       乍一看,可能感觉界面非常的混乱,特别是在应用程序很大的时候。为了更加看到我们想看的方法,我们可以通过在界面的中点击右键,点击“Find Routine”,然后选择输入过滤的条件,如下:
 
 
这样就可以快速的定位,如下:
 
 
然后在方法上面双击,就进一步的展开,查看细节,如下:
 
 
       在上图中,我们只是看到了“UseSimpleStrings”方法的使用内存的情况,因为这个界面显示的信息比较的粗糙,只是把一些内存使用比较多的方法列出来了,我们可以通过点击“0(everything)”查看所以的方法,此时看到如下:
 
 
通过上面的图,我们一目了然的直到内存的使用情况。

转载地址:http://dpncl.baihongyu.com/

你可能感兴趣的文章
八皇后问题
查看>>
关于Parse字符串为时间一次被坑经历
查看>>
BZOJ 2303: [Apio2011]方格染色 [并查集 数学!]
查看>>
dubbo方法调用的timeout设置
查看>>
System Monitor for Mac(系统监控工具)破解版安装
查看>>
django cron choice
查看>>
标准模板库(STL)学习指南之priority_queue优先队列
查看>>
开源代码分析技巧之——打印调用逻辑
查看>>
Cocos2d-x 让精灵随手指移动起来二(简单实现)
查看>>
三种观察者模式的C#实现
查看>>
[裴礼文数学分析中的典型问题与方法习题参考解答]5.1.18
查看>>
分析业务模型-类图(Class Diagram)
查看>>
从DOM操作看Vue&React的前端组件化,顺带补齐React的demo
查看>>
jquery简单原则器(匹配索引为指定值的元素)
查看>>
How Google TestsSoftware - Part One
查看>>
统计学和概率论基础
查看>>
Redis源代码分析(二十二)--- networking网络协议传输
查看>>
Android学习JNI,使用JNI实现字符串加密
查看>>
Android JNI和NDK学习(01)--搭建NDK开发环境(转)
查看>>
学习ASP.NET Core Razor 编程系列十五——文件上传功能(三)
查看>>