<<返回目录

Visual Studio

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

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

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

安装好后可以在命令行模式下使用
1.从安装后的测试工具目录下执行,或者将安装目录添加到环境变量Path里。(福利,64位安装后目录:C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Performance 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章里会描述如何利在自己的程序里跑出或者捕捉这些事件。

下一节 >> 性能计数器

[翻译]编写高性能 .NET 代码 第一章:工具介绍 -- Visual Studio的更多相关文章

  1. [翻译]编写高性能 .NET 代码 第一章:性能测试与工具 -- 平均值 vs 百分比

    <<返回目录 平均值 vs 百分比 在考虑要性能测试的目标值时,我们需要考虑用什么统计口径.大多数人都会首选平均值,但在大多数情况下,这个正确的,但你也应该适当的考虑百分数.但你有可用性的 ...

  2. [翻译]编写高性能 .NET 代码 第一章:工具介绍 -- Performance Counters(性能计数器)

    <<返回目录 Performance Counters(性能计数器) 性能计数器是监视应用程序和系统性能的最简单的方法之一.它有几十个类别数百个计数器在,包括一些.net特有的计数器.要访 ...

  3. [翻译] 编写高性能 .NET 代码--第二章 GC -- 减少分配率, 最重要的规则,缩短对象的生命周期,减少对象层次的深度,减少对象之间的引用,避免钉住对象(Pinning)

    减少分配率 这个几乎不用解释,减少了内存的使用量,自然就减少GC回收时的压力,同时降低了内存碎片与CPU的使用量.你可以用一些方法来达到这一目的,但它可能会与其它设计相冲突. 你需要在设计对象时仔细检 ...

  4. [翻译]编写高性能 .NET 代码 第二章:垃圾回收

    返回目录 第二章:垃圾回收 垃圾回收是你开发工作中要了解的最重要的事情.它是造成性能问题里最显著的原因,但只要你保持持续的关注(代码审查,监控数据)就可以很快修复这些问题.我这里说的"显著的 ...

  5. [翻译] 编写高性能 .NET 代码--第二章 GC -- 避免使用终结器,避免大对象,避免复制缓冲区

    避免使用终结器 如果没有必要,是不需要实现一个终结器(Finalizer).终结器的代码主要是让GC回收非托管资源用.它会在GC完成标记对象为可回收后,放入一个终结器队列里,在由另外一个线程执行队列里 ...

  6. [翻译] 编写高性能 .NET 代码--第二章 GC -- 将长生命周期对象和大对象池化

    将长生命周期对象和大对象池化 请记住最开始说的原则:对象要么立即回收要么一直存在.它们要么在0代被回收,要么在2代里一直存在.有些对象本质是静态的,生命周期从它们被创建开始,到程序停止才会结束.其它对 ...

  7. [翻译] 编写高性能 .NET 代码--第二章 GC -- 减少大对象堆的碎片,在某些情况下强制执行完整GC,按需压缩大对象堆,在GC前收到消息通知,使用弱引用缓存对象

    减少大对象堆的碎片 如果不能完全避免大对象堆的分配,则要尽量避免碎片化. 对于LOH不小心就会有无限增长,但LOH使用的空闲列表机制可以减轻增长的影响.利用这个空闲列表,我们可以在两块分配区域中间找到 ...

  8. [翻译]编写高性能 .NET 代码 第二章:垃圾回收 基本操作

    返回目录 基本操作 垃圾回收的算法细节还在不断完善中,性能还会有进一步的提升.下文介绍的内容在不同的.NET版本里会略有不同,但大方向是不会有变动的. 在.net进程里会管理2个类型的内存堆:托管和非 ...

  9. [翻译] 编写高性能 .NET 代码--第二章 GC -- 配置选项

    配置选项 在基于"less rope to hang yourself with"思想下,.NET 框架没有给开发提供很多太多的配置选项.但在大多数情况下,GC会跟你的硬件配置,及 ...

随机推荐

  1. java中的按位与运算

    package scanner; public class SingleAnd { public static void main(String[] args) { int[] first = {10 ...

  2. CCF系列之有趣的数(201312-4)

    题目链接: http://115.28.138.223:81/view.page?opid=4 试题名称: 有趣的数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 我们把一个 ...

  3. 动态添加div及对应的js、css文件

    动态添加div及对应的js.css文件 在近期的项目开发中需要在首页中添加很多面板型的div,直接加载代码显得很繁琐,于是利用js封装一个动态添加div及其对应css文件和js文件的方法供大家参考使用 ...

  4. 注入理解之APC注入

    近期学习做了一个各种注入的MFC程序,把一些心得和体会每天分享一些 APC(Asynchronous procedure call)异步程序调用,在NT中,有两种类型的APCs:用户模式和内核模式.用 ...

  5. linux workqueue的名字长度小问题

    在排查一个nvme的的workqueue的问题的时候,发现nvme的queue的进程名被截断了, [root@localhost caq]# ps -ef |grep -i nvme root : ? ...

  6. Git工具的使用教程

    Git 是一种版本控制工具,也叫作版本管理软件(分布式管理软件).这里介绍Git的基本使用步骤,关于 Git 更详细的介绍,读者可以参考其官方网站提供的文档. 1  安装Git 在Ubuntu系统中安 ...

  7. Android之MaterialDesign应用技术2-仿支付宝上滑搜索框缓慢消失

    PS:在这之前也就是上一篇介绍了MaterialDesign一些滑动删除.标题栏的悬浮效果等,如果没看过第一篇的小火鸡可以看一下,因为这篇是接着上一篇写的,有一些东西上一篇写过了这里就不在重复了(Ma ...

  8. java 表现层:jsp、freemarker、velocity

    在java领域,表现层技术主要有三种:jsp.freemarker.velocity. jsp是大家最熟悉的技术 优点: 1.功能强大,可以写java代码 2.支持jsp标签(jsp tag) 3.支 ...

  9. 00_HTML入门第一天

    HTML入门 body标记的常见属性:bgcolor 设置背景颜色:text 设置文本颜色:link 设置链接颜色:vlink 设置已经访问了的链接颜色:alink 正在点击的链接颜色: meta是单 ...

  10. [DeeplearningAI笔记]Batch NormalizationBN算法Batch归一化_02_3.4-3.7

    Batch Normalization Batch归一化 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.4正则化网络的激活函数 Batch归一化会使你的参数搜索问题变得很容易,使神经网络 ...