.NET性能分析最佳实践之:如何找出使用过多内存的.NET代码(基础篇)_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > .NET性能分析最佳实践之:如何找出使用过多内存的.NET代码(基础篇)

.NET性能分析最佳实践之:如何找出使用过多内存的.NET代码(基础篇)

 2012/4/15 1:20:01  netbabe  程序员俱乐部  我要评论(0)
  • 摘要:在.NET应用中一个常常影响性能的因素就是代码消耗了过多的内存。很多的开发人员在编写代码的过程中常常不会关注性能,从而使得应用程序中到处存在性能瓶颈。很多的时候,开发人员关注的总是代码的执行时间的长短,而把真正的性能问题丢掉了一边。在本篇文章中,我们将会找出代码中的哪些功能消耗了多少内存。本篇文章比较简单,我们会主要详细的介绍CLRProfiler这个工具。基础篇:详解介绍Profiler的使用大家可以从这里从微软的站点下载CLRProfiler。一旦下载CLRProfiler之后
  • 标签:.net 使用 net 代码 分析 内存

? ? 在.NET应用中一个常常影响性能的因素就是代码消耗了过多的内存。很多的开发人员在编写代码的过程中常常不会关注性能,从而使得应用程序中到处存在性能瓶颈。很多的时候,开发人员关注的总是代码的执行时间的长短,而把真正的性能问题丢掉了一边。在本篇文章中,我们将会找出代码中的哪些功能消耗了多少内存。

??????????????

本篇文章比较简单,我们会主要详细的介绍CLR Profiler这个工具。

?

基础篇:详解介绍Profiler的使用

?????? 大家可以从这里从微软的站点下载CLR Profiler。一旦下载CLR Profiler之后,我们就可以解压,然后运行Bin文件夹中的“CLRProfiler.exe”。

首先我们来介绍一下CLR Profiler的功能。

?

?????? CLR Profiler确实是一个不错的工具,通过使用它,我们可以了解一个.NET应用程序到底是如何使用内存的,基本上面它的功能可以分为两类,如图所示:

?

20120409210650.pngServices/BlogAttachment.ashx?AttachmentID=236">

?

1. 对一个.NET应用中的内存是如何分配的给出一个完整的描述。所以,我们可以看到每一种类型,方法所占用的内存情况。

2. 它告诉我们一个方法被调用了多少次。

?

?????? 这里需要注意的就是:不要再生产环境或上面的服务器站点中运行CLR Profiler,因为它会严重的影响程序的影响。例如,如果我们的应用程序中包含两个方法,fun1和fun2,此时当我们运行CLR Profiler的时候,它会将一些逻辑注入到应用程序中,通过下面的一个图就可以很清楚的看出这个问题:

?

20120409210755.png

?

?

说了这么多,我们还是来看看,如何使用CLR Profiler。

?

?????? 首先,在使用CLR Profiler之前,我们要清楚:要使用这个工具来干嘛?基本上,有两点理由:查看内存的分配与使用的情况;查看方法被调用次数。

启动了CRLProfiler.exe之后,选择要检查的程序,如下图:

?

20120409210842.png

?

?

此时,应用程序就开始运行,我们就可以在Profiler中看到一些信息,例如应用程序占用的内容,每一代对象占用的大小等,如下:

?20120409210929.png

?

?

?????? 其实上面的那个应用程序非常的简单,只是作为一个demo演示而言。上面的程序的功能就是在一个按钮的事件中调用了两个方法:UseSimpleStringsUseStringBuilders。这个两个方法都是在拼接字符串(这也是常常被用来做例子的一个场景),我们分别让它们拼接1000个字符串,如下:

?

20120409211022.png

?

?

其中UseSimpleStrings如下:

?

20120409211053.png

?

UseStringBuilders如下:

?

20120409211127.png

?????? 现在,我们可以尝试着使用Profiler去看看每个方法使用多少的内存。我们在程序中点击按钮,好让Profiler去收集信息。然后,我们在点击Profiler的“histogram”按钮,此时我们就可以看到程序中的每一种类型的内存占用情况,如下:

?

20120409211321.png

?

如果我们想看每一个方法在运行过程中占用的内容,可以点击“Allocation Graph”,如下:

?

20120409211413.png

?

通过这个操作,我们可以看到下面的图:

?

20120409211458.png

?

?????? 乍一看,可能感觉界面非常的混乱,特别是在应用程序很大的时候。为了更加看到我们想看的方法,我们可以通过在界面的中点击右键,点击“Find Routine”,然后选择输入过滤的条件,如下:

?

20120409211523.png

?

这样就可以快速的定位,如下:

?

20120409211559.png

?

然后在方法上面双击,就进一步的展开,查看细节,如下:

?

20120409211642.png

?

?????? 在上图中,我们只是看到了“UseSimpleStrings”方法的使用内存的情况,因为这个界面显示的信息比较的粗糙,只是把一些内存使用比较多的方法列出来了,我们可以通过点击“0(everything)”查看所以的方法,此时看到如下:

?

20120409211717.png

?

通过上面的图,我们一目了然的直到内存的使用情况。

发表评论
用户名: 匿名