zoukankan      html  css  js  c++  java
  • [翻译]编写高性能 .NET 代码 第一章:工具介绍 -- Visual Studio

    <<返回目录

    Visual Studio

    vs虽然不是全宇宙唯一的IDE,但它是.net开发人员最常用的开发工具。它自带一个性能分析工具,你可以使用它来做开发,不同的vs版本在工具上会略有差别。

    应该是vs2013的图

    这个是vs2015的截图

    VS可以分析CPU使用率,内存分配以及资源锁情况。它能在你开发与运行中对项目做综合的测试。

    它很强大,可以准确的测量运行了生产环境数据的大型应用程序。但是它集成在vs里面,如果你希望在生产环境下使用,需要有一个独立的性能监控工具。这个微软帮你想好了,从vs2013以后的版本里,在安装光盘里有一个独立版本。

    这个是我安装时的截图

    安装好后可以在命令行模式下使用
    1.从安装后的测试工具目录下执行,或者将安装目录添加到环境变量Path里。(福利,64位安装后目录:C:Program Files (x86)Microsoft Visual Studio 14.0Team ToolsPerformance Tools )
    2.执行:VsPerfCmd.exe /Start:Sample /Output:outputfile.vsp
    3.运行你要测试的软件
    4.执行:VsPerfCmd.exe /Shutdown

    这样你可以获得一个outputfile.vsp文件,再拖本地的vs里进行分析

    我测试了一下,可用,但是进入cmd时需要管理员模式才行

    VsPerfCmd.exe 还支持很多参数,除了上面例子里的(Sample),你还可以选择:
    Coverage(覆盖)—搜集代码覆盖率数据
    Concurrency(并发)—收集资源的并发数据
    Trace—用于收集方法的执行时间和次数

    Smple 模式会每隔几毫秒中断一次你的进程,并获得堆栈信息。这个是获得你CPU使用率的最佳方式。但是,它并不能很好的记录I/O访问,当然它不会增加太多的CPU使用量,它可以帮你记录整体的运行时间。

    Trace 模式则需要修改每个函数用来记录每次调用的时间情况。这会入侵你的代码,导致程序执行会变慢。然而,它虽然会花费更多的时间用于记录每个函数的情况,但它可以记录更准确的信息,特别是I/O访问。

    Coverage(覆盖)模式不是用于性能分析,但可以让你知道哪些代码被执行过。这是一个很好用的功能,在你运行单元测试时,可以知道你的测试覆盖了哪些代码。有些商业产品可以帮助你做这些,但你还可以为自己做得更好。

    Concurrency(并发)模式记录当通过锁或其他同步对象对资源发生争用时发生的事件。此模式可以告诉你,如果你的线程由于竞争而被阻塞。有关异步编程和测试应用中锁争用量的更多信息,请参见第四章。

    Visual Studio里的性能测试 工具是最好用的工具,但是他也相当的贵(恩,说的是国外,国内的大家请自行忽略)。如果你不能使用vs,我们也提供一些免费的替代产品。几乎所有的性能工具都使用相同的底层机制(至少在Windows 8 / Server 2012及以上内核中)
    ETW事件。ETW是Windows的事件追踪,他是操作系统以快速并高效的方式记录所有的日志信息。所有的应用程序都可以产生这些事件,分析器可以捕捉这些事件进行分析。第8章里会描述如何利在自己的程序里跑出或者捕捉这些事件。

    下一节 >> 性能计数器

  • 相关阅读:
    牛客(46)孩子们的游戏(圆圈中最后剩下的数)
    牛客(45)扑克牌顺子
    牛客(44)翻转单词顺序列
    牛客(43)左旋转字符串
    牛客(42)和为S的两个数字
    牛客(41)和为S的连续正数序列
    牛客(40)数组中只出现一次的数字
    牛客(39)平衡二叉树
    牛客(38)二叉树的深度
    牛客(37)数字在排序数组中出现的次数
  • 原文地址:https://www.cnblogs.com/yahle/p/6531286.html
Copyright © 2011-2022 走看看