• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    关于VS2012自带的 性能分析 工具使用实例(图文介绍)

    本篇通过一小段代码的console程序来进行性能的分析以及改进、直到后面的改进前、改进后性能比较结果

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

    复制代码 代码如下:

    static void Main(string[] args)
            {
                int i = 10000;
                while(i-->0)
                {
                    Core c=new  Core();
                    c.Process(DateTime.Now.ToString());
                }
            }
    public class Core
        {
            public void Process(string input)
            {
                //process logic
                string result = string.Format("{0}-{1}", DateTime.Now, input);

                //log to file
                Log(result);
            }

            public void Log(string message)
            {
                string fileName = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "log.txt");

                string msg = "{Now}: {Message}";
                msg = msg.Replace("{Now}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                msg = msg.Replace("{Message}", message);
                using (StreamWriter sw = 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负责写入到磁盘中

      修改代码如下:  

    复制代码 代码如下:

    public class Core
        {
            public void Process(string input)
            {
                //process logic
                string result = string.Format("{0}-{1}", DateTime.Now, input);

                //log to file
                Log(result);
            }


            private static Liststring> log = new Liststring>();
            public static void Log(string message)//fileName去掉了,因为此时已经不需要这个变量了,因为是由其他线程负责写入磁盘
            {
                string msg = "{Now}: {Message}";
                msg = msg.Replace("{Now}", DateTime.Now.ToString("yyyy-MM-dd HH: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来模拟请求悲催的人工请求...
    您可能感兴趣的文章:
    • VisualStudio 2008中常用快捷键
    • 使用VisualStudio开发php的图文设置方法
    • vs.net 2010 扩展插件小结 提高编程效率
    • 解析VS2010利用VS.PHP插件调试PHP的方法
    • VisualStudio 使用Visual Leak Detector检查内存泄漏
    • VS2015 免费插件Refactoring Essentials
    • .NET Visual Studio 代码性能分析工具
    • Visual Studio 2010 前端开发工具/扩展/插件推荐
    • 最锋利的Visual Studio Web开发工具扩展:Web Essentials使用详解
    上一篇:基于.NET 4.5 压缩的使用
    下一篇:MVC4 基础 枚举生成 DropDownList 实用技巧
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    关于VS2012自带的 性能分析 工具使用实例(图文介绍) 关于,VS2012,自带,的,性能,