努比亚z17mini拍照真的不好吗

用VisualStudio2013软件代码查看优化的窍门
时间:日来源:百度
1、打开VisualStudio2013(以下简称vs2013),打开工具菜单,找到扩展和更新
2、点扩展和更新之后,出现如图界面,选择联机
3、在右上角的搜索框中输入Indent,左边会出现Indent Guides,点下载
4、等待下载完成后,选择安装
5、安装完成后,会提示重启vs2013,选择立即重新启动
6、重启后打开你已经存在的项目,如果没有的话,可以随意新建一个窗口,输入一些代码,会看到代码对齐线已经有了
7、扩展:其实还有多优秀的vs插件可以选择,可以按照以上的方法进行安装,你可以选择以评分最高,下载次数多少来进行排序
Visual Studio Update 3 带来了一些新特性来简化开发者工作,包括: Application Insights 集成到新的和已有的项目,CodeLens 支…
页面地址:/xiazai/visualstudio.html
看过这篇文章的人还看过2042人阅读
在用visual studio时不知道按了什么快捷键,所有页面上的空格都变成了点号,就像下图那样。
要解决空格变点号的方法有两种:
&1、编辑-&高级-&查看空白
2、Ctrl+E 然后按S
&3.Ctrl+R+W
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:35919次
排名:千里之外
原创:32篇
转载:11篇
评论:13条
(2)(1)(1)(2)(2)(1)(3)(2)(8)(10)(2)(2)(7)还没有帐号? 赶紧
文章用户版块帖子
Visual Studio 2010 实用功能总结图解
在线时间2035小时
&&&& Visual Studio 2010 已经发布了挺长时间了,异次元软件世界也有提供了,个人感觉在使用过程中有些新功能确实方便了很多,非常值得大家一试。&&&&&&今天,在此分享一些,也算是抛砖引玉,共同学习,利用好我们手里的工具,欢迎大家来补充其他好用的功能特性……起始页面在近期项目列表中可以将一些正在开发或重要的项目Pin在列表中以方便下次使用。=700) window.open('/wp-content/uploads/cbaafb90_12C80/clip_image001.png');" style="max-width:700max-height:700" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >也可以右键项目名称打开项目所在文件夹。=700) window.open('/wp-content/uploads/cbaafb90_12C80/clip_image002.png');" style="max-width:700max-height:700" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >分屏显示本次VS2010 使用WPF 进行了大量Shell 开发,所以软件界面功能有了重大改进。尤其要提的就是分屏编写功能,Dev不用再为频繁切换程序文件而头疼了。可以直接将程序文件拖拽出IDE窗口到其他显示器中。这样就可以一边编写CS,一边编写XAML而且无需切换窗口标签。=700) window.open('/wp-content/uploads/cbaafb90_12C80/clip_image003.png');" style="max-width:700max-height:700" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >高亮显示在编辑器中点击某个符号后IDE会自动将相同符号高亮显示。如果程序很长的话可以使用Ctrl+Shift+ 向下箭头或Ctrl+Shift+向上箭头 快速浏览每一个使用该符号的地方。=700) window.open('/wp-content/uploads/cbaafb90_12C80/clip_image004.png');" style="max-width:700max-height:700" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >缩放显示通过Ctrl+ 鼠标滚轮 可以缩放代码字体大小,这个功能方便在演示过程中使用。按使用生成代码这个功能好像也叫“先消费”,在编写程序过程中如果需要构造新类,程序员可以不打断思路直接使用该类,然后再重新生成这个类。这样可以提高Dev的开发效 率。=700) window.open('/wp-content/uploads/cbaafb90_12C80/clip_image006.png');" style="max-width:700max-height:700" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >=700) window.open('/wp-content/uploads/cbaafb90_12C80/clip_image007.png');" style="max-width:700max-height:700" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >矩形选择框在VS2008中可以通过Alt+鼠标左键 对代码进行选取,VS2010不仅可以选择矩形框,还可以选择零字符宽的矩形框并在其中输入内容。=700) window.open('/wp-content/uploads/cbaafb90_12C80/clip_image008.png');" style="max-width:700max-height:700" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >=700) window.open('/wp-content/uploads/cbaafb90_12C80/clip_image009.png');" style="max-width:700max-height:700" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >调试数据跟踪在程序Debug过程中往往需要实时监控数据变化, 可以将数据Tip标签Pin在IDE窗口中随时跟踪数据变化。=700) window.open('/wp-content/uploads/cbaafb90_12C80/clip_image010.png');" style="max-width:700max-height:700" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >在下图中随着while循环的进行,j值的变化也会随 时体现在Tip标签中。=700) window.open('/wp-content/uploads/cbaafb90_12C80/clip_image011.png');" style="max-width:700max-height:700" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >调用层次结构通过鼠标右键浏览方法、属性、构造函数的调用层次结构,如果是刚接手的项目就可以用这个方法了解其相关程序结构。=700) window.open('/wp-content/uploads/cbaafb90_12C80/clip_image012.png');" style="max-width:700max-height:700" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >=700) window.open('/wp-content/uploads/cbaafb90_12C80/clip_image013.png');" style="max-width:700max-height:700" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >定位搜索编辑(Edit)菜单中选择“Navigate To” 或者通过Ctrl+, 打开定位搜索窗口。在搜索栏(模糊查询的功能很强)中输入查询内容,VS2010 将列出相关结果信息。=700) window.open('/wp-content/uploads/cbaafb90_12C80/clip_image014.png');" style="max-width:700max-height:700" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >双击搜索结果可以直接转到代码所在位置。=700) window.open('/wp-content/uploads/cbaafb90_12C80/clip_image015.png');" style="max-width:700max-height:700" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >缩略图预览其实这个功能在VS2010 RTM 发布前就被取消了,但我们仍然可以将其激活。首先确认Tools-&Options 中“Enable rich client visual experience” 处于启动状态(如下图)。=700) window.open('/wp-content/uploads/cbaafb90_12C80/clip_image0014.png');" style="max-width:700max-height:700" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >然后,在开始菜单(Run…)中运行以下命令,向注册表中添加ShowThumbnailsOnNavigation 项。reg ADD HKCU\Software\Microsoft\VisualStudio\10.0\General /v ShowThumbnailsOnNavigation /t REG_DWORD /d 1打开VS2010 项目通过Ctrl+Tab,预览已打开的项目程序。=700) window.open('/wp-content/uploads/cbaafb90_12C80/clip_image0024.png');" style="max-width:700max-height:700" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >智能感知在
中IntelliSense(智能感知)功能又进行了完善和加强,在我们输入一些关键字时,其搜索过滤功能并不只是将关键字作为查询项开头,而是包含查询项所有位置。如下图所示,当输入“index” 后我们既可以看到“IndexOutOfRangeException” 又可以检索到TabIndex 项,这使得检索功能更加人性化。=700) window.open('/wp-content/uploads/cbaafb90_12C80/clip_image0034.png');" style="max-width:700max-height:700" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >在上图中,我们定义了一个AsSoonAsPossible 的字符串变量,当输入“ASAP” 时VS2010 会根据Pascal Casing 搜索到我们想要的变量名称。=700) window.open('/wp-content/uploads/cbaafb90_12C80/clip_image0044.png');" style="max-width:700max-height:700" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >有时我们需要使用switch、foreach、for 等类似语法结构,在VS2010 中只需如入语法关键字,例如“foreach”,并点击两下Tab 键,VS2010 便会自动完成相应的语法结构。=700) window.open('/wp-content/uploads/cbaafb90_12C80/clip_image0054.png');" style="max-width:700max-height:700" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >以上智能感知功能可以提高开发人员的编程效率,可以让你早点回家陪GF [img]/wp-includes/images/smilies/simple-smile.png[/img]WPF 界面设计做WPF/Silverlight 的开发人员都知道, 对XAML 的界面的设计功能进行了很大改进,我们可以在VS2010 中直接拖拽设计XAML 界面布局。同时在使用&Grid& 进行界面布局编辑时,可以直接在设计窗口点击鼠标右键,为&Grid& 添加/删除行或列。[img]/wp-content/uploads/cbaafb90_12C80/clip_image0064.png[/img]扩展工具&&&& VS2010 另一个亮点就是扩展工具管理功能,开发人员不必到处寻找第三方扩展工具,下载并安装。只需在 VS2010-&Tools-&Extension Manager 中就可以找到许多第三方扩展工具,并可以直接在VS2010 中下载安装。[img]/wp-content/uploads/cbaafb90_12C80/clip_image0074.png[/img]相关传送门: 异次元软件世界、iPc.me 与 找文件网盘搜索 网站创始人。本来名字很酷,但很无辜地被叫成小X,瞬间被萌化了。据说爱软件,爱网络,爱游戏,爱数码,爱科技,各种控,各种宅,不纠结会死星人,不折腾会死星人。此人属虚构,如有雷同,纯属被抄袭……&&|&&&&&&&&|&& &&|&&&&|&&&&|&&&&|&&关于本文的作者本文分类:本文标签:, , , 流行热度:已超过 92,067 人围观了本文生产日期:异次纪元 10年07月11日 - 21时36分05秒文章链接: [] (转载时请注明本文出处及文章链接)上一篇 &:下一篇 &:我猜您也喜欢:Windows 8 系统完全上手指南 - 非常详尽的 Win8 系统入门学习手册与使用技巧专题教程!下载 | 异次元软件世界Java编程入门视频教程在线播放 (免费Java私塾培训初级)下载 | 异次元软件世界C#视频教程全集打包下载 (天轰穿VS2005入门.Net2.0系列视频教程)下载 | 异次元软件世界深入浅出 Mac OSX - 值得一看的苹果操作系统入门与技巧提高的中文视频教程下载 | 异次元软件世界VS2010中文旗舰版下载 Visual Studio 2010 Ultimate下载 | 异次元软件世界CodeCombat 代码战斗 - 通过玩游戏来学习编程入门与提高的超有趣网站!必须要好玩!下载 | 异次元软件世界免费编程入门教程资源推荐搜集,分享给想开始学习程序开发的同学下载 | 异次元软件世界Java编程基础入门视频教程下载 - 免费Java私塾开发视频下载 | 异次元软件世界技巧┊想让你的电脑显示你喜欢的人的名字吗下载 | 异次元软件世界VS2010中文旗舰版下载 Visual Studio 2010 Ultimate | 异次元软件下载还有这些可能你也想看看:评论 (42)各位正在潜水的同学请注意,有 42 位无聊人士 在异次元附近海域出没!天堂之翼编程……唔……顺便看能抢个沙发布 21:53:37 Mental0510板凳 03:39:42 严禁打骂顾客我最大的体会就是,VS2010比VS2008的响应速度快多啦!用VS2008简直就是受罪,多少个不眠之夜,都是在看着鼠标沙漏度过。。。内内的。 08:41:01 sun shine楼上的和我的感觉怎么严格相反呢.. 我感觉2008反应很快, 相反vs到是一直在等… 18:04:49 vanxining是啊,还是2008好。2010卡得要死。但VS2008要嵌入清单文件,基本不可能发布得了出去。我用本地C++ 13:50:42 abx沙发???? 22:01:33 MudBrick2010能否打开2005或者2008的项目和文件?急! 20:49:31 M-soon在学VB6.0,刚刚开始编程之路······(前排哦!) 22:53:20 yiplee学习了 01:06:26 爱月不编程。。。貌似VS无用。。。 01:08:40 foreverzeus太强大了 学习了 01:15:02 小爪北冰凉40米! 第一次这么近! 06:40:15 熊猫能不能弄个Dreamweaver的教程啊。。。 08:15:13 jetable佩服,楼主关注的广度 09:02:05 msm不支持windows phone 6.5及以下版本开发,唉,只能继续vs2000了。 09:27:07 joegaga恩,不懂 支持下吧 11:19:35 Z0.0vs2005还没用熟,vs2008开始用了三个月,vs2010又来了…到了2012,我也该歇歇了……. 11:42:30 Youfly其实IDE只是编程的工具,版本变化对语言本身影响不大,只是对编程的效率、质量有影响,所以对于VS的版本不必这么在意,用VS2010也没想象中的那样需要很多学习时间。 08:38:45 诺诺同学支持支持 13:04:07 lmLZ…看到你网站内文章显示的时候。图片是在滚动条浏览到的时候才加载的,能否指明下实现思路呢~ 17:42:54 X-Force使用一个叫LazyLoad的jQuery插件可以实现 17:52:31 hackerxuVS2010已经出中文版了吧~在beta1的时候就用了一下,感觉比较爽~就是不能支持以后的Windows Phone7和往下的wince的开发,遗憾~ 20:23:18 forever用RTM吧,现在支持WP7了 13:06:07 Firm者教程太详细了,非常感谢 22:17:18 hnfwd有没有中文版的啊,英文学的不是太好。看起来挺费劲 23:20:02 LXS科技呵呵~教程真不错 04:51:30 粉丝终于看到你的图片延迟加载了。灰常不错! 10:02:39 大智若鲁还没有装2010呢 10:06:07 tRial图片延迟显示的那个功能不错。公司领导不准俺用2010,俺内牛。。。 10:21:32 sarh2o有些功能是6.0就有的,也有一些在里面就有了,看样子lz用vs用的不多,呵呵 21:50:34 风尹玄翊2010用起来确实感觉比2008好…个人意见 16:07:39 朝夕vs10用过下,用来开发sl的录音和摄像功能,原来还这么多快捷功能的,有空试下 21:33:22 缝隙小X哥哥 ,, 能不能 提供个 SQL Server 2008很期待你这个软件的发布 13:39:41 流星2010速度是比较爽,不过不要麻木的升级,我用开2008,没那么占资源,另外,reportview,2010的话,无法认倒2008SP1那个版本,必须安装REPORTVIEW2010才得,但装REPORTVIEW2010又要安装.NET3.5,太麻烦了,我的程序都是用2.0开发的,装3.5慢好多呢。而且客户机也不能接受。后来我把它转回到2008,结果很多时候都无法读到引用的对象。 12:15:18 dbzmzm我觉得vs2010很好用,我是一位初学c++的朋友,我毅然选择TA作为我的工具,谢谢你了 17:48:09 小邹不错哟,加油! 21:39:20 renxingyu不错,谢谢分享 08:05:06 52tear不错, 收下了.话说我的语言天赋太烂了难得有那么好的教程“ 10:31:09 小米朱呵呵,用Delphi的。现在开始学习并转用Visual studio 2010 C# 。谢谢 22:39:47 ☆诺♂迷★中文版,不过貌似官方汉化不怎么多。。。 23:39:15 zcv330I Like中午才说有教C++的晚上就被我找到了 23:20:49 何军网站页面出现问题了,在IE8下面掉下来了底部跑到上面去了,肯定是指定了高度。 15:56:58 小X的哥哥的同学的老师的儿子的妈妈养的小猫的表弟的主人的朋友说看帖不回会被鄙视de你的大名 (*必填) : E-Mail (*必填): 你的网站 (可选填):评论内容 (*必填):(Ctrl + Enter 快速提交)&& 异次元の宝藏Categorys随便找点东西来看看:Random Posts标签云集Tag Cloud「&&|&&」
善者 慈悲心常在 无怨无恨 以苦为乐默认压缩密码文件分享密码问题:/read-htm-tid-4444.html
UID:10941
在线时间0小时
我想知道 到底用2010 还是 2013好
限100 字节
批量上传需要先选择文件,再选择上传
您目前还是游客,请
&回复后跳转到最后一页
验证问题:
Powered by & Copyright Time now is:06-05 04:19 &
版权所有 Gzip enabled当前位置:&>&&>&
vs全程序优化 带你玩转Visual Studio――性能分析与优化
发布时间:
来源:服务器之家
上一篇文章带你玩转Visual Studio――VC++的多线程开发讲了VC++中多线程的主要用法。多线程是提升性能和解决并发问题的有效途经。在商用程序的开发中,性能是一个重要的指标,程序的性能优化也是一个重要的工作。
二八法则适合很多事物:最重要的只占其中一小部分,约20%,其余80%的尽管是多数,却是次要的。在程序代码中也是一样,决定应用性能的就那20%的代码(甚至更少)。因此优化实践中,我们将精力集中优化那20%最耗时的代码上,这那20%的代码就是程序的性能瓶颈,主要针对这部分代码进行优化。
这部分我就不写,直接参见《性能调优攻略》,因为我没有自信能写出比这更好的。
如果不想这么深入地了解,看看《C++程序常见的性能调优方式》这篇文章也是不错的。
我们以一个应用案例来讲解,以至于不会那么乏味难懂。
我们知道能被1和它本身整除的整数叫质数,假设1到任意整数N的和为Sn(Sn=1+2+3+…+n)。现在要求1之间所有质数和Sn。
可能你会觉得这问题不是So Easy吗!都不用脑袋想,咣当一下就把代码写完了,
&code class="language-C+++ hljs cpp has-numbering" style="display: padding: 0 color: box-sizing: border- font-family: "Source Code Pro",font-size: white-space: border-radius: 0 word-wrap: background:"&&span
style="color: rgb(68, 68, 68); box-sizing: border-"&#include &iostream&&/span&
style="color: rgb(68, 68, 68); box-sizing: border-"&#include &windows.h&&/span&
style="color: rgb(136, 0, 0); box-sizing: border-"&// 定义64位整形&/span&
style="color: rgb(0, 0, 136); box-sizing: border-"&typedef&/span& __int64 int64_t;
style="color: rgb(136, 0, 0); box-sizing: border-"&// 获取系统的当前时间,单位微秒(us)&/span&
int64_t GetSysTimeMicros()
style="color: rgb(136, 0, 0); box-sizing: border-"&// 从日0:0:0:000到日0:0:0:000的时间(单位100ns)&/span&
style="color: rgb(68, 68, 68); box-sizing: border-"&#define EPOCHFILETIME
(000000UL)&/span&
LARGE_INTEGER
int64_t tt = &span
style="color: rgb(0, 102, 102); box-sizing: border-"&0&/span&;
GetSystemTimeAsFileTime(&ft);
li.LowPart = ft.dwLowDateT
li.HighPart = ft.dwHighDateT
style="color: rgb(136, 0, 0); box-sizing: border-"&// 从日0:0:0:000到现在的微秒数(UTC时间)&/span&
tt = (li.QuadPart - EPOCHFILETIME) / &span
style="color: rgb(0, 102, 102); box-sizing: border-"&10&/span&;
style="color: rgb(0, 0, 136); box-sizing: border-"&return&/span&
style="color: rgb(136, 0, 0); box-sizing: border-"&// 计算1到n之间所有整数的和&/span&
int64_t CalculateSum(&span
style="color: rgb(0, 0, 136); box-sizing: border-"&int&/span& n)
style="color: rgb(0, 0, 136); box-sizing: border-"&if&/span& (n & &span
style="color: rgb(0, 102, 102); box-sizing: border-"&0&/span&)
style="color: rgb(0, 0, 136); box-sizing: border-"&return&/span& -&span
style="color: rgb(0, 102, 102); box-sizing: border-"&1&/span&;
int64_t sum = &span
style="color: rgb(0, 102, 102); box-sizing: border-"&0&/span&;
style="color: rgb(0, 0, 136); box-sizing: border-"&for&/span& (&span
style="color: rgb(0, 0, 136); box-sizing: border-"&int&/span& i = &span
style="color: rgb(0, 102, 102); box-sizing: border-"&0&/span&; i & i++)
style="color: rgb(0, 0, 136); box-sizing: border-"&return&/span&
style="color: rgb(136, 0, 0); box-sizing: border-"&// 判断整数n是否为质数&/span&
style="color: rgb(0, 0, 136); box-sizing: border-"&bool&/span& IsPrime(&span
style="color: rgb(0, 0, 136); box-sizing: border-"&int&/span& n)
style="color: rgb(0, 0, 136); box-sizing: border-"&if&/span& (n & &span
style="color: rgb(0, 102, 102); box-sizing: border-"&2&/span&)
style="color: rgb(0, 0, 136); box-sizing: border-"&return&/span& &span
style="color: rgb(0, 0, 136); box-sizing: border-"&false&/span&;
style="color: rgb(0, 0, 136); box-sizing: border-"&for&/span& (&span
style="color: rgb(0, 0, 136); box-sizing: border-"&int&/span& i = &span
style="color: rgb(0, 102, 102); box-sizing: border-"&2&/span&; i & i++)
style="color: rgb(0, 0, 136); box-sizing: border-"&if&/span& (n %i == &span
style="color: rgb(0, 102, 102); box-sizing: border-"&0&/span&)
style="color: rgb(0, 0, 136); box-sizing: border-"&return&/span& &span
style="color: rgb(0, 0, 136); box-sizing: border-"&false&/span&;
style="color: rgb(0, 0, 136); box-sizing: border-"&return&/span& &span
style="color: rgb(0, 0, 136); box-sizing: border-"&true&/span&;
style="color: rgb(0, 0, 136); box-sizing: border-"&void&/span& PrintPrimeSum()
int64_t startTime = GetSysTimeMicros();
style="color: rgb(0, 0, 136); box-sizing: border-"&int&/span& count = &span
style="color: rgb(0, 102, 102); box-sizing: border-"&0&/span&;
int64_t sum = &span
style="color: rgb(0, 102, 102); box-sizing: border-"&0&/span&;
style="color: rgb(0, 0, 136); box-sizing: border-"&for&/span& (&span
style="color: rgb(0, 0, 136); box-sizing: border-"&int&/span& i = &span
style="color: rgb(0, 102, 102); box-sizing: border-"&10000&/span&; i &= &span
style="color: rgb(0, 102, 102); box-sizing: border-"&100000&/span&; i++)
style="color: rgb(0, 0, 136); box-sizing: border-"&if&/span& (IsPrime(i))
sum = CalculateSum(i);
style="color: rgb(102, 0, 102); box-sizing: border-"&std&/span&::&span
style="color: rgb(102, 0, 102); box-sizing: border-"&cout&/span& && sum && &span
style="color: rgb(0, 136, 0); box-sizing: border-"&"\t"&/span&;
style="color: rgb(0, 0, 136); box-sizing: border-"&if&/span& (count % &span
style="color: rgb(0, 102, 102); box-sizing: border-"&10&/span& == &span
style="color: rgb(0, 102, 102); box-sizing: border-"&0&/span&)
style="color: rgb(102, 0, 102); box-sizing: border-"&std&/span&::&span
style="color: rgb(102, 0, 102); box-sizing: border-"&cout&/span& && &span
style="color: rgb(102, 0, 102); box-sizing: border-"&std&/span&::
int64_t usedTime = GetSysTimeMicros() - startT
style="color: rgb(0, 0, 136); box-sizing: border-"&int&/span& second = usedTime / &span
style="color: rgb(0, 102, 102); box-sizing: border-"&1000000&/span&;
int64_t temp = usedTime % &span
style="color: rgb(0, 102, 102); box-sizing: border-"&1000000&/span&;
style="color: rgb(0, 0, 136); box-sizing: border-"&int&/span& millise = temp / &span
style="color: rgb(0, 102, 102); box-sizing: border-"&1000&/span&;
style="color: rgb(0, 0, 136); box-sizing: border-"&int&/span& micros = temp % &span
style="color: rgb(0, 102, 102); box-sizing: border-"&1000&/span&;
style="color: rgb(102, 0, 102); box-sizing: border-"&std&/span&::&span
style="color: rgb(102, 0, 102); box-sizing: border-"&cout&/span& && &span
style="color: rgb(0, 136, 0); box-sizing: border-"&"执行时间:"&/span& && second && &span
style="color: rgb(0, 136, 0); box-sizing: border-"&"s "&/span& && millise && &span
style="color: rgb(0, 136, 0); box-sizing: border-"&"' "&/span& && micros && &span
style="color: rgb(0, 136, 0); box-sizing: border-"&"''"&/span& && &span
style="color: rgb(102, 0, 102); box-sizing: border-"&std&/span&::
}&/code&&ul
style="box-sizing: border- position: width: 50 top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right-width: 1 border-right-style: border-right-color: rgb(221, 221, 221); list-style: text-align: background-color: rgb(238, 238, 238);"&&li style="box-sizing: border- padding: 0px 5"&1&/li&&li style="box-sizing: border- padding: 0px 5"&2&/li&&li style="box-sizing: border- padding: 0px 5"&3&/li&&li style="box-sizing: border- padding: 0px 5"&4&/li&&li style="box-sizing: border- padding: 0px 5"&5&/li&&li style="box-sizing: border- padding: 0px 5"&6&/li&&li style="box-sizing: border- padding: 0px 5"&7&/li&&li style="box-sizing: border- padding: 0px 5"&8&/li&&li style="box-sizing: border- padding: 0px 5"&9&/li&&li style="box-sizing: border- padding: 0px 5"&10&/li&&li style="box-sizing: border- padding: 0px 5"&11&/li&&li style="box-sizing: border- padding: 0px 5"&12&/li&&li style="box-sizing: border- padding: 0px 5"&13&/li&&li style="box-sizing: border- padding: 0px 5"&14&/li&&li style="box-sizing: border- padding: 0px 5"&15&/li&&li style="box-sizing: border- padding: 0px 5"&16&/li&&li style="box-sizing: border- padding: 0px 5"&17&/li&&li style="box-sizing: border- padding: 0px 5"&18&/li&&li style="box-sizing: border- padding: 0px 5"&19&/li&&li style="box-sizing: border- padding: 0px 5"&20&/li&&li style="box-sizing: border- padding: 0px 5"&21&/li&&li style="box-sizing: border- padding: 0px 5"&22&/li&&li style="box-sizing: border- padding: 0px 5"&23&/li&&li style="box-sizing: border- padding: 0px 5"&24&/li&&li style="box-sizing: border- padding: 0px 5"&25&/li&&li style="box-sizing: border- padding: 0px 5"&26&/li&&li style="box-sizing: border- padding: 0px 5"&27&/li&&li style="box-sizing: border- padding: 0px 5"&28&/li&&li style="box-sizing: border- padding: 0px 5"&29&/li&&li style="box-sizing: border- padding: 0px 5"&30&/li&&li style="box-sizing: border- padding: 0px 5"&31&/li&&li style="box-sizing: border- padding: 0px 5"&32&/li&&li style="box-sizing: border- padding: 0px 5"&33&/li&&li style="box-sizing: border- padding: 0px 5"&34&/li&&li style="box-sizing: border- padding: 0px 5"&35&/li&&li style="box-sizing: border- padding: 0px 5"&36&/li&&li style="box-sizing: border- padding: 0px 5"&37&/li&&li style="box-sizing: border- padding: 0px 5"&38&/li&&li style="box-sizing: border- padding: 0px 5"&39&/li&&li style="box-sizing: border- padding: 0px 5"&40&/li&&li style="box-sizing: border- padding: 0px 5"&41&/li&&li style="box-sizing: border- padding: 0px 5"&42&/li&&li style="box-sizing: border- padding: 0px 5"&43&/li&&li style="box-sizing: border- padding: 0px 5"&44&/li&&li style="box-sizing: border- padding: 0px 5"&45&/li&&li style="box-sizing: border- padding: 0px 5"&46&/li&&li style="box-sizing: border- padding: 0px 5"&47&/li&&li style="box-sizing: border- padding: 0px 5"&48&/li&&li style="box-sizing: border- padding: 0px 5"&49&/li&&li style="box-sizing: border- padding: 0px 5"&50&/li&&li style="box-sizing: border- padding: 0px 5"&51&/li&&li style="box-sizing: border- padding: 0px 5"&52&/li&&li style="box-sizing: border- padding: 0px 5"&53&/li&&li style="box-sizing: border- padding: 0px 5"&54&/li&&li style="box-sizing: border- padding: 0px 5"&55&/li&&li style="box-sizing: border- padding: 0px 5"&56&/li&&li style="box-sizing: border- padding: 0px 5"&57&/li&&li style="box-sizing: border- padding: 0px 5"&58&/li&&li style="box-sizing: border- padding: 0px 5"&59&/li&&li style="box-sizing: border- padding: 0px 5"&60&/li&&li style="box-sizing: border- padding: 0px 5"&61&/li&&li style="box-sizing: border- padding: 0px 5"&62&/li&&li style="box-sizing: border- padding: 0px 5"&63&/li&&li style="box-sizing: border- padding: 0px 5"&64&/li&&li style="box-sizing: border- padding: 0px 5"&65&/li&&li style="box-sizing: border- padding: 0px 5"&66&/li&&li style="box-sizing: border- padding: 0px 5"&67&/li&&li style="box-sizing: border- padding: 0px 5"&68&/li&&li style="box-sizing: border- padding: 0px 5"&69&/li&&li style="box-sizing: border- padding: 0px 5"&70&/li&&li style="box-sizing: border- padding: 0px 5"&71&/li&&li style="box-sizing: border- padding: 0px 5"&72&/li&&li style="box-sizing: border- padding: 0px 5"&73&/li&&li style="box-sizing: border- padding: 0px 5"&74&/li&&li style="box-sizing: border- padding: 0px 5"&75&/li&&li style="box-sizing: border- padding: 0px 5"&76&/li&&li style="box-sizing: border- padding: 0px 5"&77&/li&&li style="box-sizing: border- padding: 0px 5"&78&/li&&li style="box-sizing: border- padding: 0px 5"&79&/li&&li style="box-sizing: border- padding: 0px 5"&80&/li&&li style="box-sizing: border- padding: 0px 5"&81&/li&&li style="box-sizing: border- padding: 0px 5"&82&/li&&li style="box-sizing: border- padding: 0px 5"&83&/li&&/ul&
然后一运行,耗时9s 659’ 552”(9秒659毫秒552微秒)。我想这肯定不是你要的结果(太慢了),如果你觉得还满意,那下面的就可以不用看了。
性能分析工具的选择
打开一个“性能分析”的会话:Debug-&Start Diagnotic Tools Without Debugging(或按Alt+F2),VS2013在Analysis菜单中。&
检测CPU的性能,主要用于发现影响CPU瓶颈(消耗大量CPU资源)的代码。
检测GPU的性能,常用于图形引擎的应用(如DirectX程序),主要用于判断是CPU还是GPU的瓶颈。
Memory Usage
检测应用程序的内存,发现内存。
Performance Wizard
性能(监测)向导,综合检测程序的性能瓶颈。这个比较常用,下面再逐一说明。
性能(监测)向导
指定性能分析方法;&
性能分析方法
CPU Sampling(CPU采样):&
进行采样统计,以低开销水平监视占用大量CPU的应用程序。这个对于计算量大的程序可大大节省监控时间。&
Instrumentation(检测):&
完全统计,测量函数调用计数和用时&
.NET memory allocation:&
跟踪托管内存分配。这个好像只有托管代码(如C#)才可用,一般以C++代码好像不行。&
Resource contention data(并发):&
检测等待其他线程的线程,多用于多线程的并发。
选择要检测的模块或应用程序;
启动分析程序进行监测。
性能分析报告
程序分析完成之后会生成一个分析报告,这就是我们需要的结果。&
性能分析报告概要
有几个不同的视图可供我们切换,下面加粗的部分是个人觉得比较方便和常用的视图。&
Summary(概要):整个报告概要说明&
Call Tree(调用树):以树形表格的方式展开函数之间的关系。&
Module(模块):分析调用的不同的程序模块,如不同的DLL、lib模块的耗时&
Caller/Callee(调用与被调用):以数值显示的调用与被调用的关系&
Functions(函数统计):以数值显示的各个函数的执行时间和执行次数统计值&
Marks(标记):&
Processers(进程):&
Function Detials(函数详情):以图表的方式形象地显示:调用函数-当前函数-被调用子函数之间的关系和时间比例。&
如果是第一次看这报告,你还不一定能看懂。你需要先了解一些专用术语(你可以对照着Call Tree视图和Functions视图去理解):&
Num of Calls:(函数)调用次数&
Elapsed Inclusive Time:已用非独占时间&
Elapsed Exclusive Time:已用独占时间&
Avg Elapsed Inclusive Time:平均已用非独占时间&
Avg Elapsed Exclusive Time:平均已用独占时间&
Module Name:模块名称,一般为可执行文件(.exe)、动态库(.dll)、静态库(.lib)的名称。
也许看完你还迷糊,只要理解什么是独占与非独占你就都明白了。
什么是独占与非独占
非独占样本数是指的包括了子函数执行时间的总执行时间&
独占样本数是不包括子函数执行时间的函数体执行时间,函数执行本身花费的时间,不包括子(函数)树执行的时间。
我们已经大致了解了VS2015性能分析工具的使用方法。现在回归本质,解决上面提及的应用案例的问题。
1、我们选择Function Detials视图,从根函数开始依据百分比最大的项选择,直到选择PrintPrimeSum,这时可以看到如下图:&
找出性能瓶颈1
我们可以看到IO占了50%多(49.4%+9.7%)的时间,所以IO是最大的性能瓶颈。其实,有一定编程经验的人应该都能明白,在控制台输出信息是很耗时的。我们只是需要结果,不一定非要在控制中全部输出,我们可以将结果保存到文件,这样也比输出到控制台快。
注:上图所示的时间,应该是非独占时间的百分比。
知道了瓶颈,就改进行代码优化吧:
&code class="language-C++ hljs cpp has-numbering" style="display: padding: 0 color: box-sizing: border- font-family: "Source Code Pro",font-size: white-space: border-radius: 0 word-wrap: background:"&&span
style="color: rgb(0, 0, 136); box-sizing: border-"&void&/span& PrintPrimeSum()
int64_t startTime = GetSysTimeMicros();
style="color: rgb(102, 0, 102); box-sizing: border-"&std&/span&::
outfile.open(&span
style="color: rgb(0, 136, 0); box-sizing: border-"&"D:\\Test\\PrimeSum.dat"&/span&, &span
style="color: rgb(102, 0, 102); box-sizing: border-"&std&/span&::ios::out | &span
style="color: rgb(102, 0, 102); box-sizing: border-"&std&/span&::ios::app);
style="color: rgb(0, 0, 136); box-sizing: border-"&int&/span& count = &span
style="color: rgb(0, 102, 102); box-sizing: border-"&0&/span&;
int64_t sum = &span
style="color: rgb(0, 102, 102); box-sizing: border-"&0&/span&;
style="color: rgb(0, 0, 136); box-sizing: border-"&for&/span& (&span
style="color: rgb(0, 0, 136); box-sizing: border-"&int&/span& i = &span
style="color: rgb(0, 102, 102); box-sizing: border-"&10000&/span&; i &= &span
style="color: rgb(0, 102, 102); box-sizing: border-"&100000&/span&; i++)
style="color: rgb(0, 0, 136); box-sizing: border-"&if&/span& (IsPrime(i))
sum = CalculateSum(i);
outfile && sum && &span
style="color: rgb(0, 136, 0); box-sizing: border-"&"\t"&/span&;
style="color: rgb(0, 0, 136); box-sizing: border-"&if&/span& (count % &span
style="color: rgb(0, 102, 102); box-sizing: border-"&10&/span& == &span
style="color: rgb(0, 102, 102); box-sizing: border-"&0&/span&)
outfile && &span
style="color: rgb(102, 0, 102); box-sizing: border-"&std&/span&::
outfile.close();
int64_t usedTime = GetSysTimeMicros() - startT
style="color: rgb(0, 0, 136); box-sizing: border-"&int&/span& second = usedTime / &span
style="color: rgb(0, 102, 102); box-sizing: border-"&1000000&/span&;
int64_t temp = usedTime % &span
style="color: rgb(0, 102, 102); box-sizing: border-"&1000000&/span&;
style="color: rgb(0, 0, 136); box-sizing: border-"&int&/span& millise = temp / &span
style="color: rgb(0, 102, 102); box-sizing: border-"&1000&/span&;
style="color: rgb(0, 0, 136); box-sizing: border-"&int&/span& micros = temp % &span
style="color: rgb(0, 102, 102); box-sizing: border-"&1000&/span&;
style="color: rgb(102, 0, 102); box-sizing: border-"&std&/span&::&span
style="color: rgb(102, 0, 102); box-sizing: border-"&cout&/span& && &span
style="color: rgb(0, 136, 0); box-sizing: border-"&"执行时间:"&/span& && second && &span
style="color: rgb(0, 136, 0); box-sizing: border-"&"s "&/span& && millise && &span
style="color: rgb(0, 136, 0); box-sizing: border-"&"' "&/span& && micros && &span
style="color: rgb(0, 136, 0); box-sizing: border-"&"''"&/span& && &span
style="color: rgb(102, 0, 102); box-sizing: border-"&std&/span&::
}&/code&&ul
style="box-sizing: border- position: width: 50 top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right-width: 1 border-right-style: border-right-color: rgb(221, 221, 221); list-style: text-align: background-color: rgb(238, 238, 238);"&&li style="box-sizing: border- padding: 0px 5"&1&/li&&li style="box-sizing: border- padding: 0px 5"&2&/li&&li style="box-sizing: border- padding: 0px 5"&3&/li&&li style="box-sizing: border- padding: 0px 5"&4&/li&&li style="box-sizing: border- padding: 0px 5"&5&/li&&li style="box-sizing: border- padding: 0px 5"&6&/li&&li style="box-sizing: border- padding: 0px 5"&7&/li&&li style="box-sizing: border- padding: 0px 5"&8&/li&&li style="box-sizing: border- padding: 0px 5"&9&/li&&li style="box-sizing: border- padding: 0px 5"&10&/li&&li style="box-sizing: border- padding: 0px 5"&11&/li&&li style="box-sizing: border- padding: 0px 5"&12&/li&&li style="box-sizing: border- padding: 0px 5"&13&/li&&li style="box-sizing: border- padding: 0px 5"&14&/li&&li style="box-sizing: border- padding: 0px 5"&15&/li&&li style="box-sizing: border- padding: 0px 5"&16&/li&&li style="box-sizing: border- padding: 0px 5"&17&/li&&li style="box-sizing: border- padding: 0px 5"&18&/li&&li style="box-sizing: border- padding: 0px 5"&19&/li&&li style="box-sizing: border- padding: 0px 5"&20&/li&&li style="box-sizing: border- padding: 0px 5"&21&/li&&li style="box-sizing: border- padding: 0px 5"&22&/li&&li style="box-sizing: border- padding: 0px 5"&23&/li&&li style="box-sizing: border- padding: 0px 5"&24&/li&&li style="box-sizing: border- padding: 0px 5"&25&/li&&li style="box-sizing: border- padding: 0px 5"&26&/li&&li style="box-sizing: border- padding: 0px 5"&27&/li&&li style="box-sizing: border- padding: 0px 5"&28&/li&&/ul&
再次执行,发现时间一下减小到:3s 798’ 218”。效果很明显!
2、但这还不够,继续检查别的问题,对新代码再次用性能分析工具检测一下。&
找出性能瓶颈2
我们发现IsPrime函数占用了62%的时间,这应该是一个瓶颈,我们能不能对其进行算法的优化?仔细想想,上面求质数的方法其实是最笨的方法,稍微对其进行优化一下:
&code class="language-C+++ hljs cs has-numbering" style="display: padding: 0 color: box-sizing: border- font-family: "Source Code Pro",font-size: white-space: border-radius: 0 word-wrap: background:"&&span
style="color: rgb(136, 0, 0); box-sizing: border-"&// 判断整数n是否为质数&/span&
style="color: rgb(0, 0, 136); box-sizing: border-"&bool&/span& IsPrime(&span
style="color: rgb(0, 0, 136); box-sizing: border-"&int&/span& n)
style="color: rgb(0, 0, 136); box-sizing: border-"&if&/span& (n & &span
style="color: rgb(0, 102, 102); box-sizing: border-"&2&/span&)
style="color: rgb(0, 0, 136); box-sizing: border-"&return&/span& &span
style="color: rgb(0, 0, 136); box-sizing: border-"&false&/span&;
style="color: rgb(0, 0, 136); box-sizing: border-"&if&/span& (n == &span
style="color: rgb(0, 102, 102); box-sizing: border-"&2&/span&)
style="color: rgb(0, 0, 136); box-sizing: border-"&return&/span& &span
style="color: rgb(0, 0, 136); box-sizing: border-"&true&/span&;
style="color: rgb(136, 0, 0); box-sizing: border-"&//把2的倍数剔除掉&/span&
style="color: rgb(0, 0, 136); box-sizing: border-"&if&/span& (n%&span
style="color: rgb(0, 102, 102); box-sizing: border-"&2&/span& == &span
style="color: rgb(0, 102, 102); box-sizing: border-"&0&/span&)
style="color: rgb(0, 0, 136); box-sizing: border-"&return&/span& &span
style="color: rgb(0, 0, 136); box-sizing: border-"&false&/span&;
style="color: rgb(136, 0, 0); box-sizing: border-"&// 其实不能被小于n的根以下的数整除,就是一个质数&/span&
style="color: rgb(0, 0, 136); box-sizing: border-"&for&/span& (&span
style="color: rgb(0, 0, 136); box-sizing: border-"&int&/span& i = &span
style="color: rgb(0, 102, 102); box-sizing: border-"&3&/span&; i*i &= i += &span
style="color: rgb(0, 102, 102); box-sizing: border-"&2&/span&)
style="color: rgb(0, 0, 136); box-sizing: border-"&if&/span& (n % i == &span
style="color: rgb(0, 102, 102); box-sizing: border-"&0&/span&)
style="color: rgb(0, 0, 136); box-sizing: border-"&return&/span& &span
style="color: rgb(0, 0, 136); box-sizing: border-"&false&/span&;
style="color: rgb(0, 0, 136); box-sizing: border-"&return&/span& &span
style="color: rgb(0, 0, 136); box-sizing: border-"&true&/span&;
}&/code&&ul
style="box-sizing: border- position: width: 50 top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right-width: 1 border-right-style: border-right-color: rgb(221, 221, 221); list-style: text-align: background-color: rgb(238, 238, 238);"&&li style="box-sizing: border- padding: 0px 5"&1&/li&&li style="box-sizing: border- padding: 0px 5"&2&/li&&li style="box-sizing: border- padding: 0px 5"&3&/li&&li style="box-sizing: border- padding: 0px 5"&4&/li&&li style="box-sizing: border- padding: 0px 5"&5&/li&&li style="box-sizing: border- padding: 0px 5"&6&/li&&li style="box-sizing: border- padding: 0px 5"&7&/li&&li style="box-sizing: border- padding: 0px 5"&8&/li&&li style="box-sizing: border- padding: 0px 5"&9&/li&&li style="box-sizing: border- padding: 0px 5"&10&/li&&li style="box-sizing: border- padding: 0px 5"&11&/li&&li style="box-sizing: border- padding: 0px 5"&12&/li&&li style="box-sizing: border- padding: 0px 5"&13&/li&&li style="box-sizing: border- padding: 0px 5"&14&/li&&li style="box-sizing: border- padding: 0px 5"&15&/li&&li style="box-sizing: border- padding: 0px 5"&16&/li&&li style="box-sizing: border- padding: 0px 5"&17&/li&&li style="box-sizing: border- padding: 0px 5"&18&/li&&li style="box-sizing: border- padding: 0px 5"&19&/li&&li style="box-sizing: border- padding: 0px 5"&20&/li&&li style="box-sizing: border- padding: 0px 5"&21&/li&&li style="box-sizing: border- padding: 0px 5"&22&/li&&li style="box-sizing: border- padding: 0px 5"&23&/li&&li style="box-sizing: border- padding: 0px 5"&24&/li&&li style="box-sizing: border- padding: 0px 5"&25&/li&&li style="box-sizing: border- padding: 0px 5"&26&/li&&li style="box-sizing: border- padding: 0px 5"&27&/li&&li style="box-sizing: border- padding: 0px 5"&28&/li&&li style="box-sizing: border- padding: 0px 5"&29&/li&&li style="box-sizing: border- padding: 0px 5"&30&/li&&/ul&
再次执行,发现时间一下减小到:1s 312’ 75”,几乎减了一半的时间。
3、这还是有点慢,再看看还能不能进行优化。对新代码再次用性能分析工具检测一下。&
找出性能瓶颈2
CalculateSum函数占了88.5%的时间,这绝对是影响目前程序性能的主要因素。对其进行。仔细想想,求1到N的和其实就是求1、2、3 … N的等差数列的和。优化
&code class="language-C+++ hljs cs has-numbering" style="display: padding: 0 color: box-sizing: border- font-family: "Source Code Pro",font-size: white-space: border-radius: 0 word-wrap: background:"&&span
style="color: rgb(136, 0, 0); box-sizing: border-"&// 计算1到n之间所有整数的和&/span&
int64_t CalculateSum(&span
style="color: rgb(0, 0, 136); box-sizing: border-"&int&/span& n)
style="color: rgb(0, 0, 136); box-sizing: border-"&if&/span& (n & &span
style="color: rgb(0, 102, 102); box-sizing: border-"&0&/span&)
style="color: rgb(0, 0, 136); box-sizing: border-"&return&/span& -&span
style="color: rgb(0, 102, 102); box-sizing: border-"&1&/span&;
style="color: rgb(136, 0, 0); box-sizing: border-"&//(n * (1 + n)) / 2&/span&
style="color: rgb(0, 0, 136); box-sizing: border-"&return&/span& ( n * (&span
style="color: rgb(0, 102, 102); box-sizing: border-"&1&/span& + n) ) && &span
style="color: rgb(0, 102, 102); box-sizing: border-"&1&/span&;
}&/code&&ul
style="box-sizing: border- position: width: 50 top: 0 left: 0 margin: 0 padding: 6px 0px 40 border-right-width: 1 border-right-style: border-right-color: rgb(221, 221, 221); list-style: text-align: background-color: rgb(238, 238, 238);"&&li style="box-sizing: border- padding: 0px 5"&1&/li&&li style="box-sizing: border- padding: 0px 5"&2&/li&&li style="box-sizing: border- padding: 0px 5"&3&/li&&li style="box-sizing: border- padding: 0px 5"&4&/li&&li style="box-sizing: border- padding: 0px 5"&5&/li&&li style="box-sizing: border- padding: 0px 5"&6&/li&&li style="box-sizing: border- padding: 0px 5"&7&/li&&li style="box-sizing: border- padding: 0px 5"&8&/li&&li style="box-sizing: border- padding: 0px 5"&9&/li&&li style="box-sizing: border- padding: 0px 5"&10&/li&&li style="box-sizing: border- padding: 0px 5"&11&/li&&/ul&&div class="save_code tracking-ad" data-mod="popu_249" style="box-sizing: border- position: height: 60 right: 30 top: 5 color: rgb(255, 255, 255); cursor: z-index: 2;"&&a target=_blank target="_blank" style="box-sizing: border- color: rgb(12, 137, 207);"&&img src="http://static.images/save_snippets.png" style="border: box-sizing: border-"
/&&/a&&/div&
再次执行,发现时间一下减小到:0s 91’ 6”,一秒中之内,基本上可以满足要求子。
程序性能调优,就是数上面这样一点点地改进的过程,直到满足应用的要求。上面只用了一个视图的一种统计指标(各函数所用时间占总时间的百分比),就解决了问题。对于大型的复杂应用程序,我们可以结果多种视图的多种统计指标进行综合判断,找出程序性能的瓶颈!
Copyright © . 版权所有

我要回帖

 

随机推荐