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

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 代码 第一章:性能测试与工具 -- 选择什么来衡量

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

原文地址:http://www.cnblogs.com/yahle/p/6531286.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/325327.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 程序员必备的 Intellij IDEA 插件

转载自 Java 程序员必备的 Intellij IDEA 插件 来源:柠檬学园 以下是我用过不错的Intellij插件,分享给大家希望能帮到大家。 1. .ignore 地址:https://plugins.jetbrains.com/plugin/7495--ignore 生成各种ignore文件,一键创建g…

表单中去掉重置和提交按钮和搜索框

去掉重置和提交按钮 <ProFormsubmitter{{// 配置按钮文本searchConfig: {resetText: 重置,submitText: 提交,},// 配置按钮的属性resetButtonProps: {style: {// 隐藏重置按钮display: none,},},submitButtonProps: {},// 完全自定义整个区域render: (props, doms) > {c…

《四世同堂》金句摘抄(七)

System.out.println("这两天还是读的《四世同堂》"); System.out.println("这本书好长啊"); System.out.println("不断的听&#xff0c;不断的看&#xff0c;才到1000多页"); System.out.println("这几天没有好好的读&#xff0c;追求了速度…

ASP.NET 开发者 开始学习ASP.NET Core 2吧

.NET Core 从2016年6月28日发布&#xff0c;过去了将近一年的时间&#xff0c;但是在工作中发现大家对.net core的接受程度并不高&#xff0c;这只是一个感觉&#xff0c;俗话说“没有调查就没有发言权”&#xff0c; 这两天通过微信小程序在微信群里做了一个调查&#xff0c;参…

Spring Boot Redis Cluster 实战干货

转载自 Spring Boot Redis Cluster 实战干货 添加配置信息 spring.redis:database: 0 # Redis数据库索引&#xff08;默认为0&#xff09;#host: 192.168.1.8#port: 6379password: 123456timeout: 10000 # 连接超时时间&#xff08;毫秒&#xff09; pool: max-active: 8 #…

《四世同堂》金句摘抄(八)

System.out.println("这两天还是读的《四世同堂》"); System.out.println("这本书好长啊"); System.out.println("不断的听&#xff0c;不断的看&#xff0c;才到1000多页"); System.out.println("这几天没有好好的读&#xff0c;追求了速度…

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

Performance Counters&#xff08;性能计数器&#xff09; 性能计数器是监视应用程序和系统性能的最简单的方法之一。它有几十个类别数百个计数器在&#xff0c;包括一些.net特有的计数器。要访问这些可以通过系统自带的 性能监控程序&#xff08;perfmon.exe&#xff09;来实…

java后台手动分页

单个实体类 Integer pageNumber po.getPageNumber();Integer pageSize po.getPageSize();Integer last pageNumber * pageSize;if ((pageNumber * pageSize)>weekResultInfoVOS.size()){lastweekResultInfoVOS.size();}int size weekResultInfoVOS.size();List<Week…

超详细的 Redis Cluster 官方集群搭建指南

转载自 超详细的 Redis Cluster 官方集群搭建指南 今天从 0 开始搭建 Redis Cluster 官方集群&#xff0c;解决搭建过程中遇到的问题&#xff0c;超详细。 安装ruby环境 因为官方提供的创建集群的工具是用ruby写的&#xff0c;需要ruby2.2.2版本支持&#xff0c;ruby安装需…

《四世同堂》金句摘抄(九)

System.out.println("这两天还是读的《四世同堂》"); System.out.println("这本书好长啊"); System.out.println("不断的听&#xff0c;不断的看&#xff0c;才到1000多页"); System.out.println("这几天没有好好的读&#xff0c;追求了速度…

EF通用数据层封装类(支持读写分离,一主多从)

浅谈orm 记得四年前在学校第一次接触到 Ling to Sql&#xff0c;那时候瞬间发现不用手写sql语句是多么的方便&#xff0c;后面慢慢的接触了许多orm框架&#xff0c;像 EF&#xff0c;Dapper,Hibernate,ServiceStack.OrmLite 等。当然每种orm都有各自的优势&#xff0c;也有不足…

前端进行时间段筛选

传给后端参数时进行格式化 weekResultTimeStart:params.insertTime!null?moment(params.insertTime[0]).format(YYYY-MM-DD HH:mm:ss):null,weekResultTimeEnd:params.insertTime!null?moment(params.insertTime[1]).format(YYYY-MM-DD HH:mm:ss):null,注意点&#xff1a; 前…

Java中的常量池(字符串常量池、class常量池和运行时常量池)

转载自 Java中的常量池(字符串常量池、class常量池和运行时常量池) 简介&#xff1a; 这几天在看Java虚拟机方面的知识时&#xff0c;看到了有几种不同常量池的说法&#xff0c;然后我就去CSDN、博客园等上找资料&#xff0c;里面说的内容真是百花齐放&#xff0c;各自争艳&…

《四世同堂》金句摘抄(十)

System.out.println("这两天还是读的《四世同堂》"); System.out.println("这本书好长啊"); System.out.println("不断的听&#xff0c;不断的看&#xff0c;才到1000多页"); System.out.println("这几天没有好好的读&#xff0c;追求了速度…

IdentityServer4(OAuth2.0服务)折腾笔记

以下&#xff0c;称这个使用了IdentityServer4的OAuth2.0服务的项目称为Passport项目。 组件说明&#xff08;Nuget&#xff09; Passport项目所需组件 项目以Asp.net Core Identity项目模板初始化&#xff0c;集成IdentityServer4中间件&#xff1b;集成IdentityServer4.AspN…

map遍历进行展示

{userList.map((item,index)> <Option key{index} value{item.userId}>{item.realName||null}</Option>)||null}

Vue.js基础体验(一)

今天开始学习Vue.js啦&#xff0c;刚开始看起来&#xff0c;确实很难很难&#xff0c;但是经过一番“周折”&#xff0c;发现也就那样&#xff0c;没有想象的那么难。 下面是今天记录的代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"…

青蛙跳台阶的问题——Fibonacci

转载自 青蛙跳台阶的问题——Fibonacci 这几天正在复习算法&#xff0c;今天在看一篇文章时偶然看到这个题目&#xff0c;想了一下居然没什么思路……&#xff08;抱歉&#xff0c;实在太菜。)&#xff0c;文章中提示了一个关键词&#xff1a;Fibonacci 数列。然后我又小百度…

Javase基础

Javase基础1.XML文档作用 保存和传输数据 类如&#xff1a; <标题> 标题 </标题> 2.Java的特性优势&#xff08;编译型语言和解释性语言&#xff09; 1.安全 2.面向对象 3.简单性&#xff08;C&#xff09; 4.高性能 5.分布式 6.多线程 7.高并发 8.跨平台 可移植性…

LocalDateTime与LocalDate之间的相互转换

LocalDateTime转换为LocalDate和LocalTime LocalDate转为LocalDateTime