ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

c# – PerfView:分析应用程序的性能,包括数据库调用

2019-06-23 22:54:01  阅读:274  来源: 互联网

标签:c net profiling performance perfview


我目前正在使用PerfView进行我的(C#)应用程序的性能分析.
但通常这些应用程序使用大量数据库调用.
所以我问自己这样的问题:
– 在存储库中花了多少时间?
– (等待SQL查询返回需要多长时间?) – >我不知道这是否有可能用PerfView发现

但是从我的踪迹中我几乎没有任何有用的结果.在“Any Stacks”视图中,它告诉我(当我在我的存储库中使用分组时)在我的Repsoitory中花费了1.5秒(整个调用大约是45秒).我知道这不是真的,因为存储库调用数据库很多.

是不是在等待SQL查询完成时没有捕获CPU指标,因为CPU在这段时间内无事可做,因此我的时间只包括存储库中的数据转换时间等?

谢谢你的帮助!

编辑:

我错过的是打开线程时间选项以获取被阻止代码的时间(这是我想的数据库调用期间发生的事情).我现在得到了所有的筹码,只是过滤掉了无趣的东西.但我似乎无处可去.

使用“线程时间”时对我来说特别有趣的是BLOCKED_TIME.但随着时间的推移我想起来了.当你看截图时,它告诉我CPU_TIME是28,384.这是毫秒(afaik),但BLOCKED_TIME是2,314,732,不能是毫秒.因此CPU_TIME的百分比非常低,为1.2%,但70秒中的28个仍然很多.所以包容百分比时间是在这里比较苹果和橘子.有人可以解释一下吗?

解决方法:

所以,我成功了.

我错过了(Vance Morrison实际上在他的视频教程中对此进行了解释)是:当使用perfview进行挂钟时间分析时,您将从所有已经“等待”的线程中获得所谓的“BLOCKED_TIME”的累计时间.这意味着70秒的时间,终结者线程为这个“BLOCKED_TIME”增加了70秒,因为它坐在那里没有做任何事情(至少在我的情况下几乎任何事情).

因此,在进行挂钟时间分析时,过滤掉您感兴趣的内容非常重要.例如,搜索占用CPU时间最多的线程,只需在分析中包含此线程,然后再往堆栈中查找你的代码很昂贵(也可能导致数据库或服务调用).一旦你从一个方法的角度进行分析,你真的得到了在这个方法中花费的时间,并且累积的“BLOCK_TIME”就不在了.

我发现最有用的是在我自己的代码中搜索“看起来很耗时”的方法,我切换到此方法的调用者视图.从调用它的位置和调用者的角度来看,是什么导致了进一步向下的消耗时间(存储库或服务中的数据库调用需要获取一些数据).

有点难以解释,但一旦我真正理解了挂钟时间分析的基础知识,那么在某些方面它都是有意义的.

我推荐这个视频教程:http://channel9.msdn.com/Series/PerfView-Tutorial

再次,伟大而强大的工具!

标签:c,net,profiling,performance,perfview
来源: https://codeday.me/bug/20190623/1275375.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有