??xml version="1.0" encoding="utf-8" standalone="yes"?>
一个比较不错的Ҏ是信息导出成为报表的信息Q然后在excel中进行分析。操作方法如下:
一旦上面的按钮点击之后Q所有的调用树就会被昄出来Q还没有信息保存ؓcsv格式Q如下:
保存Zcsv之后Q我们通过excel打开Q就可以q行分析了,如下Q?/span>
除了采用上面的方法用Profiler之外Q我们还可以在代码中使用Profiler的功能。如果我们知道了哪些Ҏ需要跟t,我们可以在代码中开启Profiler?/span>
首先Q我们要在自q目中引?#8220;CLRProfilerControl.dll”Q然后可以写如下的代码:
q样写完之后呢,我们可以运行profiler来启动我们的E序。这里要注意Q我们必ȝ?#8220;profile active”Q因为我们已l运行我们的代码q行profiler的检查跟t功能,如下Q?/span>
此时Q如果我们查?#8220;histogram”Q就会发现数据非常的,如下Q?/span>
如果我们查看“allocation graphQ内存分配图Q?#8221;Q此Ӟ我们׃看到一个非常干净的界面了。和之前一P我们q是要点?#8220;everything”来看所有的Ҏ的占用的内存Q如下:
到这里,Profiler的用就介绍完了Q我们ȝ一下吧Q?/span>
本篇文章比较单,我们会主要详l的介绍CLR Profilerq个工具?/span>
基础:详解介绍Profiler的?/span>
大家可以从这里从微Y?/span>站点下蝲CLR Profiler。一旦下载CLR Profiler之后Q我们就可以解压Q然后运行Bin文g夹中?#8220;CLRProfiler.exe”?/span>
首先我们来介l一下CLR Profiler的功能?/span>
CLR Profiler实是一个不错的工具Q通过使用它,我们可以了解一?NET应用E序到底是如何用内存的Q基本上面它的功能可以分Zc?如图所C:
1. 对一?NET应用中的内存是如何分配的l出一个完整的描述。所以,我们可以看到每一U类型,Ҏ所占用的内存情c?/span>
2. 它告诉我们一个方法被调用了多次?/span>
q里需要注意的是Q不要再生环境或上面的服务器站点中q行CLR ProfilerQ因为它会严重的影响E序的媄响。例如,如果我们的应用程序中包含两个ҎQfun1和fun2Q此时当我们q行CLR Profiler的时候,它会一些逻辑注入到应用程序中Q通过下面的一个图可以很清楚的看个问题:
说了q么多,我们q是来看看,如何使用CLR Profiler?/span>
首先Q在使用CLR Profiler之前Q我们要清楚Q要使用q个工具来干嘛?基本上,有两点理由:查看内存的分配与使用的情况;查看Ҏ被调用次数?/span>
启动了CRLProfiler.exe之后Q选择要检查的E序Q如下图Q?/span>
此时Q应用程序就开始运行,我们可以在Profiler中看C些信息,例如应用E序占用的内容,每一代对象占用的大小{,如下Q?/span>
其实上面的那个应用程序非常的单,只是作ؓ一个demo演示而言。上面的E序的功能就是在一个按钮的事g中调用了两个ҎQ?strong style="padding-right: 0px; padding-left: 0px; font-weight: bold; padding-bottom: 0px; margin: 0px; padding-top: 0px">UseSimpleStrings?strong style="padding-right: 0px; padding-left: 0px; font-weight: bold; padding-bottom: 0px; margin: 0px; padding-top: 0px">UseStringBuilders。这个两个方法都是在拼接字符Ԍq也是常常被用来做例子的一个场景)Q我们分别让它们拼接1000个字W串Q如下:
其中UseSimpleStrings如下Q?/span>
UseStringBuilders如下Q?/span>
现在Q我们可以尝试着使用Profilerȝ看每个方法用多的内存。我们在E序中点L钮,好让ProfilerL集信息。然后,我们在点击Profiler?#8220;histogram”按钮Q此时我们就可以看到E序中的每一U类型的内存占用情况Q如下:
如果我们想看每一个方法在q行q程中占用的内容Q可以点?#8220;Allocation Graph”Q如下:
通过q个操作Q我们可以看C面的图:
乍一看,可能感觉界面非常的乱,特别是在应用E序很大的时候。ؓ了更加看到我们想看的ҎQ我们可以通过在界面的中点d键,点击“Find Routine”Q然后选择输入qo的条Ӟ如下Q?/span>
q样可以快速的定位Q如下:
然后在方法上面双击,p一步的展开Q查看细节,如下Q?/span>
在上图中Q我们只是看C“UseSimpleStrings”Ҏ的用内存的情况Q因个界面显C的信息比较的粗p,只是把一些内存用比较多的方法列出来了,我们可以通过点击“0(everything)”查看所以的ҎQ此时看到如下:
通过上面的图Q我们一目了然的直到内存的用情?/span>