8天玩转并行开发——第八天用VS性能向导解剖你的程序.docVIP

8天玩转并行开发——第八天用VS性能向导解剖你的程序.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
8天玩转并行开发——第八天用VS性能向导解剖你的程序.doc

? ? ?最后一篇,我们来说说vs的“性能向导,通常我们调试程序的性能一般会使用Stopwatch,如果希望更加系统的了解程序,我们就需要 用到”性能向导“,通过性能报告便于我们快速的发现并找到潜在的性能问题。 ? 首先我们上一段需要改进的代码: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Diagnostics; 6 7 namespace Test 8 { 9 class Program 10 { 11 static object obj = new object(); 12 13 static void Main(string[] args) 14 { 15 var watch = Stopwatch.StartNew(); 16 17 var range = ParallelEnumerable.Range(1, 100000000); 18 19 var query = (from n in range.AsParallel() 20 where n % 5 == 0 21 select Calculate(n)).Average(); 22 23 watch.Stop(); 24 25 Debug.WriteLine(耗费时间:{0}, watch.Elapsed); 26 Console.WriteLine(耗费时间:{0}, watch.Elapsed); 27 } 28 29 /// summary 30 /// 模拟复杂的数学计算 31 /// /summary 32 /// param name=num/param 33 /// returns/returns 34 static double Calculate(int num) 35 { 36 lock (obj) 37 { 38 var sqrt = Math.Sqrt(num); 39 40 var pow = Math.Pow(sqrt, 5); 41 42 var log10 = Math.Log10(pow); 43 44 var floor = Math.Floor(log10); 45 46 return floor; 47 } 48 } 49 } 50 } ? 记住,我们的程序需要改成Release版本,因为这里包含了太多的优化信息。 ? 找到”工具栏”-分析-启动性能向导,选中“并发”-可视化多线程应用程序的行为。 然后选中我们的程序Test ? 最后点击完成,如果是第一次使用的话会提示你“是否立即配置符号”,这是因为我们的并行计算用到了window函数,所以我们调试的时候 需要加载这些符号。点击“是”,然后勾选“MicroSoft符号服务器”,点击确定就OK了。 ? 稍等一会,我们会看到三种视图:CPU使用率,线程,内核。 然后我们进入“CPU使用率”,看看情况。 从图中:我们可以获知如下信息: ①:从图中的绿色破浪线可以看出,我们的程序确实是多核计算。 ②:并行计算耗时16515ms,平均CPU使用率:39%。,这里要注意,性能剖析器也需要耗费CPU周期,所以执行时间要稍大于实际时间。 ? 然后,我们点击“线程“tab,看看效果 ? 通过点击各个”线程”的绿色小条,然后看下“分析报告”:发现程序被三个task承载执行:主线程(644),辅助线程(4824),辅助线程(1564)。 ? 然后我们点击“可见时间线分析”中的“同步”,看看同步是由谁贡献出来的,清楚的看到Monitor.Enter,这是因为我的代码里面有lock。 而且阻塞时间还是蛮厉害的,这里就是我们可以优化的点。 ? 接下来,我

文档评论(0)

docindpp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档