vs性能检测.docx

上传人:b****5 文档编号:4956482 上传时间:2022-12-12 格式:DOCX 页数:11 大小:813.20KB
下载 相关 举报
vs性能检测.docx_第1页
第1页 / 共11页
vs性能检测.docx_第2页
第2页 / 共11页
vs性能检测.docx_第3页
第3页 / 共11页
vs性能检测.docx_第4页
第4页 / 共11页
vs性能检测.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

vs性能检测.docx

《vs性能检测.docx》由会员分享,可在线阅读,更多相关《vs性能检测.docx(11页珍藏版)》请在冰豆网上搜索。

vs性能检测.docx

vs性能检测

先看console代码(源代码下载):

复制代码代码如下:

staticvoidMain(string[]args)

       {

           inti=10000;

           while(i-->0)

           {

               Corec=new Core();

               c.Process(DateTime.Now.ToString());

           }

       }

publicclassCore

   {

       publicvoidProcess(stringinput)

       {

           //processlogic

           stringresult=string.Format("{0}-{1}",DateTime.Now,input);

           //logtofile

           Log(result);

       }

       publicvoidLog(stringmessage)

       {

           stringfileName=System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"log.txt");

           stringmsg="{Now}:

{Message}";

           msg=msg.Replace("{Now}",DateTime.Now.ToString("yyyy-MM-ddHH:

mm:

ss"));

           msg=msg.Replace("{Message}",message);

           using(StreamWritersw=System.IO.File.AppendText(fileName))

           {

               sw.WriteLine(msg);

               sw.Flush();

               sw.Close();

           }

       }

   }

 点击“完成”按钮,此时会自动进行分析,直接跑完控制台程序,vs2012会自动显示出分析报告,如下:

从上面的“摘要”报告中得知

System.IO.File.AppendText函数和System.AppDomain.get_BaseDirectory函数耗时最多,我们需要先优化这2个函数的使用(稍后再讲)共列出了最耗时的5个函数

报告视图种类:

生成的报告视图有很多种,上面所示默认的是“摘要”视图,其他类型的视图如下所列:

那么我们如何跟踪这几个耗时的函数呢?

我们需要转入“函数详细信息”视图,如下:

右边红框代表耗时分布比例,显然上图中Process函数占用了很大比例

下边的红框代表相应的代码,并且还会红色高亮性能损耗突出的代码行、以及相应损耗比例(图中的99.2%是由于这行代码共有3个损耗点:

83.3%+14.4%+1.5%)

我们需要往下跟踪,进入最严重的process函数进行查看,我们click右边红框中的Process条,进入细化的分析界面,如下:

看来主要问题来自"Log(result)"代码行,占了73.5%,继续深入跟踪,如下图:

这下差不多了,这里比较损耗多的2行是:

获得fileName和AppendText到日志文件代码行,分别优化:

获得文件名优化日志文件名是不变的,因此不用每次Log(msg)都要计算,直接extract为static的fileName变量AppendText优化一旦牵涉到I/O操作,速度就慢,无法避免(从单行代码的角度来看),那怎么办?

那就把结构改掉吧:

主程序写入log到队列中,由另外一个thread负责写入到磁盘中

  修改代码如下:

  

复制代码代码如下:

publicclassCore

   {

       publicvoidProcess(stringinput)

       {

           //processlogic

           stringresult=string.Format("{0}-{1}",DateTime.Now,input);

           //logtofile

           Log(result);

       }

       privatestaticListlog=newList();

       publicstaticvoidLog(stringmessage)//fileName去掉了,因为此时已经不需要这个变量了,因为是由其他线程负责写入磁盘

       {

           stringmsg="{Now}:

{Message}";

           msg=msg.Replace("{Now}",DateTime.Now.ToString("yyyy-MM-ddHH:

mm:

ss"));

           msg=msg.Replace("{Message}",message);

           log.Add(msg);

       }

   }   

我们再次运行性能分析,如下:

我们比较下第一次和这一次的曲线图:

改进后的性能明显好于改进之前的性能。

自定义性能分析

我们可以通过修改属性来add/remove性能指标,比如要加入某个/某些Windows计数器、收集Windows事件、收集.NET对象生命周期等,我们可以进行如下操作来进行设置:

将会生成如下更详细的报告:

报告中会列出生成的最多的是哪种对象(本例中是string)、由哪些函数导致的分配了最多的内存、等等

在“标记”视图中,能看到每隔500毫秒收集的windows计数器数据,如下图就是磁盘队列计数器的收集:

在“对象生存期”视图中,能看到各种对象从new到dispose的所有数据,如下图:

很牛b吧。

下面说说如何通过VS2012来对独立运行的程序进行性能分析,其实很简单,就下面这个图就搞定了,大家都懂的:

再说说如何对web项目性能分析吧...

先打开web项目解决方案,然后直接进行性能分析,有人会说没有请求操作啊,这个简单,有多个解决办法:

再开一个VS环境(无论是远程的还是本地的),通过web负载测试来疯狂请求通过loadrunner/qtp来模拟请求悲催的人工请求...

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1