c# – 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