dottrace

性能优化之三:将Dottrace过程加入持续集成

不羁的心 提交于 2020-04-08 23:50:53
之前分享过一篇 如何做接口性能分析 的文章,但是整个分析过程有点繁琐,需要写一个控制台程序调用被测接口,再预热、启动dottrace追踪,最后才能得到我们想要的性能分析报告。如果有办法一键生成性能分析报告,那就会省很多不必要的时间。这里我们就借助Jenkins自动化完成这一过程。 目标: 把Dottrace的性能分析集成到Jenkins中,使我们在构建的时候,可以触发Dottrace分析指定方法,并生成相关测试报告。 步骤: 开发一个业务程序的Host程序,这个程序可以通过反射调用被测的业务方法; 在Jenkins中,通过PowerShell调用Dottrace的CommandProfile执行Host程序,Host程序再执行被测业务方法,生成报告。 通过邮件把生成的报告发送到我们指定的邮箱 开发Host程序 1. 按照我们公司的规范,每个接口都需要创建UnitTest,用于调试具体某个业务方法。那么,我们被测程序自然就选择这些UnitTest。 2. 做一个PerformanceAnalysisAttribute类,用于标识该方法将被用来执行性能分析。 [AttributeUsage(AttributeTargets.Method)] public class PerformanceAnalysisAttribute:Attribute { public

什么是一些好的.NET Profilers?

♀尐吖头ヾ 提交于 2020-02-27 07:51:30
您在使用.net程序时使用了哪些分析器,您会特别推荐哪些? #1楼 我广泛使用了 JetBrains dotTrace 和 Redgate ANTS 。 它们在功能和价格上非常相似。 它们都提供有用的性能分析和非常基本的内存分析。 dotTrace与Resharper集成,这非常方便,因为您只需单击一下IDE即可分析单元测试的性能。 然而,dotTrace似乎经常会产生虚假的结果(例如说一个方法需要花费几年的时间才能运行) 我更喜欢ANTS呈现分析结果的方式。 它向您显示源代码,每行左侧显示运行所需的时间。 dotTrace只有树视图。 EQATEC分析器 非常基础,需要您编译程序集的特殊检测版本,然后可以在EQATEC分析器中运行。 然而,它是免费的。 总的来说,我更喜欢ANTS进行性能分析,但如果你使用Resharper,那么dotTrace的集成是一个杀手级功能,意味着它在可用性方面胜过ANTS。 免费的Microsoft CLR Profiler( .Net framework 2.0 / .Net Framework 4.0 )是.NET内存分析所需的全部内容。 2011年更新: Scitech内存分析器 有一个非常基本的UI,但有很多有用的信息,包括dotTrace和ANTS缺少的非托管内存的一些信息 - 如果你正在进行COM互操作,你可能会发现它很有用

是DateTime.Now是测量函数性能的最佳方法吗?

好久不见. 提交于 2020-02-25 15:42:54
我需要找到一个瓶颈,并且需要准确地测量时间。 以下代码段是衡量性能的最佳方法吗? DateTime startTime = DateTime.Now; // Some execution process DateTime endTime = DateTime.Now; TimeSpan totalTimeTaken = endTime.Subtract(startTime); #1楼 我刚刚在Vance Morrison的博客中发现了一篇关于他编写 的CodeTimer类的帖子,该类 使得使用 StopWatch 变得更容易并且做了一些整洁的东西。 #2楼 Visual Studio Team System 具有一些可能有助于解决此问题的功能。 基本上,您可以编写单元测试并将它们混合在不同的场景中,以作为压力或负载测试的一部分运行。 这可能有助于确定最能影响应用程序性能的代码区域。 Microsoft的模式和实践组在 Visual Studio Team System性能测试指南中 有一些指导。 #3楼 我在程序中使用的方式是使用StopWatch类,如下所示。 Stopwatch sw = new Stopwatch(); sw.Start(); // Critical lines of code long elapsedMs = sw.Elapsed

dot trace profile, why is my in memory fetch being flagged as slow

假如想象 提交于 2020-01-05 03:34:18
问题 How would i improve this? the profile is suggesting that fetching data from a list is slow public List<RowDataDto> Rows { get; set; } public RowDataDto GetRow(int rowNdx) { var row = Rows.SingleOrDefault(x => x.LineNumber == rowNdx); return row; } The list will on average contain around 1000 items im just benchmaching to see how it performance. its saying the slowest part is fetching from an in memory list. Rows is populated well before GetRow is called. LineNumber is an int32 PS - I have

How Come when I sampling profile a program and it actually runs faster than not profiling?

点点圈 提交于 2019-12-23 12:07:57
问题 I use DotTrace 4.5 performance time in release mode: 2400000000 Basic: 00:00:08.8051103 2400000000 Five: 00:00:09.1561338 2400000000 Overload: 00:00:16.3740938 2400000000 IListtoFive: 00:00:15.5841445 time when profiling in release mode. 2400000000 Basic: 00:00:01.0048224 2400000000 Five: 00:00:03.5416982 2400000000 Overload: 00:00:11.8009959 2400000000 IListtoFive: 00:00:11.2568770 My code: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System

~85.5% of native code when profiling with Jet Brain's dotTrace?

 ̄綄美尐妖づ 提交于 2019-12-11 14:19:39
问题 Whenever I do a session (both samplig and timeline), it says like up to 70-80 percent of entire exuction is occupied by native code. It seems kind of suspicious, not quite sure whether I got a buggy environment (because due to objective restricitions I am working on a damn Windows 7) or it's actually fine? 回答1: It is a normal situation in case of profiling a web application hosted on IIS as IIS is a native application itself. So if all of your app's methods are presented in a snaphot then you