使用Intel VTune性能分析器分析.NET模块运行时间

简介:
 因为本人也是该工具的初学者,所以本文的内容可能会浅一些,甚至还包括一些本人的主观臆测,如果大家有不同意见欢迎指正,呵呵。
    
      Intel VTune的下载地址,请
点击这里
      本文所使用的DEMO示例与之前的一篇文章中的DEMO相同,代码链接
   
      因为本文使用的DEMO是基于Parallel.For,所以会创建一些线程,而这些线程的创建运行时间会通过Intel VTune的分析结果给出。
      首先假设大家已下载并安装了该软件,然后我们通过点击菜单"File"-->"New Project",会弹出创建项目的提示框,我们选择"Call Graph Wizard"项目类型,并命名为"Parallel_For"如下图:
   
      在接下来的提示窗口中会提示对什么类型的应用程序进行分析优化,我们选择.Net*profiling如下图:

        
     然后系统会提示我们.net应用的类型,因为示例代码是.net命令行类型,所以我们选择“Executable(可执行)”,如下图:    
       
      当点击“下一步”按钮会,系统会提示绑定相应的应用程序路径,我们点击“...”按钮选择DEMO的生成文件路径,如下图:   
       
     然后在最后的完成窗口中,我们保持系统默认选项即可,如下图:
    
      到这里,我们点击“完成”按钮,系统会自动运行DEMO的EXE文件,并完成相应的图形绘制工作。
    下面我们看一下其生成的图形化信息:  

   
 
     这里主要看的是各线程模块运行时间信息,当我们将鼠标放在相应的“线程”图标上时,如下图:    
    
     在本DEMO示例中,我们看到线程0的耗时时间是最长的,即1,377,719,162微秒
(注:1秒 = 1,000,000微秒)。我们可以将鼠标放在该线程关联的后续箭头指向的相应.NET模块,看一下其各个MODULE耗时的长短,比如说“Ex1Task2_UseParallelForMethod”方法:
   
    
     下面我们再看一下System.Console.ReadLine()方法的耗时,如下图:
        
 
     通过对比可以看出System.Console.ReadLine()方法要比Ex1Task2_UseParallelForMethod耗时近10倍,而System.Console.ReadLine()中最耗时的模块调用又是什么呢?见下图:
    
   
     按说找到了最耗时的操作之后只要在Intel VTune中击该模块的鼠标右键,选中弹出菜单的“View Source”项就会打开相应的源码,然后就可以进行相应的程序优化的。
   
    但因为本例中最耗时的地方在.net框架中的readline模块,因此如在该模块上点击“View Source”会报错,如下图:    
  
     如果此时选择“是”按钮,则Intel VTune会调出“汇编窗口”进行显示:)

     当然,除了查看运行时间之外,我发现该软件还可以帮助我们分析.net模块被加载的次数,比如说我们使用"Ctrl+F"调出查询窗口,在里面输入"get_DefaultScheduler",如下图:
  
   
     我们会看到该模块只被加载过一次,并且还就在"线程0"中(双击该方法即可看到),这应该是在线程池会在创建时初始化的线程调度器,其主要的作用应该就是“管理调度”线程。因此它只被创建一次(在当前进程下,如果是多进程的话,会在每个进程中初始化一个线程池)。当然在并行框架中的Task也有相应对象:TaskManager(其采用工作窃取技术让CPU保持全速工状态),可以参见园子里这位朋友的文章

     还有就是如果那位朋友有四核处理器或双CPU的机器,也可以跑一下该这DEMO,并测试一相应的模块的加载运行时间和次数,看看有什么不同。

     本人机器环境:   
    

     好的,今天的内容就先到这里了,因为该工具过于强大,只能一步步摸索着使用,所以有些观点或问题不能完成解释清楚。


本文转自 daizhenjun 51CTO博客,原文链接:http://blog.51cto.com/daizhj/127101,如需转载请自行联系原作者
相关文章
|
19天前
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
67 13
|
4月前
|
SQL 缓存 开发框架
分享一个 .NET EF6 应用二级缓存提高性能的方法
分享一个 .NET EF6 应用二级缓存提高性能的方法
|
1月前
|
开发框架 安全 .NET
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱。它不仅加速了应用开发进程,提升了开发质量和可靠性,还促进了创新和业务发展,培养了专业人才和技术社区,为软件开发和数字化转型做出了重要贡献。
27 5
|
1月前
|
传感器 人工智能 供应链
.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。
本文深入探讨了.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。通过企业级应用、Web应用及移动应用的创新案例,展示了.NET在各领域的广泛应用和巨大潜力。展望未来,.NET将与新兴技术深度融合,拓展跨平台开发,推动云原生应用发展,持续创新。
35 4
|
1月前
|
机器学习/深度学习 人工智能 Cloud Native
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台。本文深入解析 .NET 的核心优势,探讨其在企业级应用、Web 开发及移动应用等领域的应用案例,并展望未来在人工智能、云原生等方面的发展趋势。
39 3
|
1月前
|
开发框架 安全 Java
.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力
本文深入探讨了.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力。.NET不仅支持跨平台开发,具备出色的安全性和稳定性,还能与多种技术无缝集成,为企业级应用提供全面支持。
36 3
|
1月前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
1月前
Visual Studio 快速分析 .NET Dump 文件
【11月更文挑战第10天】.NET Dump 文件是在 .NET 应用程序崩溃或出现问题时生成的,记录了应用程序的状态,包括内存对象、线程栈和模块信息。通过分析这些文件,开发人员可以定位和解决内存泄漏、死锁等问题。在 Visual Studio 中,可以通过调试工具、内存分析工具和符号加载等功能来详细分析 Dump 文件。此外,还可以使用第三方工具如 WinDbg 进行更深入的分析。
|
1月前
|
人工智能 Java 编译器
.NET 9 发布 性能提升、AI 支持与全方位改进
【11月更文挑战第5天】.NET 9 引入了多项改进,包括性能提升、AI 支持和全方位功能优化。性能方面,编译器增强、服务器 GC 优化、矢量化和硬件支持等提升了执行效率。AI 方面,新增学习材料、合作伙伴生态、原生支持和生成式 AI 集成。此外,.NET Aspire 组件升级、编程语言新功能和开发工具更新进一步提升了开发体验。
|
3月前
|
存储 运维
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!

相关课程

更多