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章里会描述如何利在自己的程序里跑出或者捕捉这些事件。

    下一节 >> 性能计数器

  • 相关阅读:
    UVA 11174 Stand in a Line,UVA 1436 Counting heaps —— (组合数的好题)
    UVA 1393 Highways,UVA 12075 Counting Triangles —— (组合数,dp)
    【Same Tree】cpp
    【Recover Binary Search Tree】cpp
    【Binary Tree Zigzag Level Order Traversal】cpp
    【Binary Tree Level Order Traversal II 】cpp
    【Binary Tree Level Order Traversal】cpp
    【Binary Tree Post order Traversal】cpp
    【Binary Tree Inorder Traversal】cpp
    【Binary Tree Preorder Traversal】cpp
  • 原文地址:https://www.cnblogs.com/yahle/p/6531286.html
Copyright © 2011-2022 走看看