【工作中问题解决实践 五】DotTrace性能调优最佳实践

简介: 【工作中问题解决实践 五】DotTrace性能调优最佳实践

最近测试报了一个问题:页面加载慢,代码慢怎么办,代码慢在了哪里呢?于是决定使用DotTrace来进行性能分析,简直打开了通往新世界的大门,玩儿起来太爽了。接下来我用这篇实践来手把手教大家怎么玩儿DotTrace.

  • DotTrace简介,简单介绍DotTrace如何使用,安装方式,配置说明
  • DotTrace实践,使用DotTrace进行列表加载慢、导出慢的问题分析,如何使用DotTrace进行性能分析,包括Controller接口调试以及单元测试接口调试

好,接下来就依据目录顺序来讲解下。

DotTrace简介

什么是DotTrace,在项目开发之中,前期可能主要以保证任务完成为主,对于性能优化主要在于开发完成之后再来进行。可能在测试的时候发现部分接口的代码执行时间过长,但是又毫无头绪,这个时候你就需要性能分析工具来协助你排查问题了。就像我现在遇到的情况,别人说你慢,你得查出哪里慢,是否能优化,如果不慢,确实需要那么多时间,你也可以给出证据

DotTrace安装

我这里使用的是VS2019集成版,你也可以考虑使用本地安装包,简单介绍下集成的安装方式,如果需要本地安装包可以私聊我。首先通过VS的扩展搜索联机搜索DotTrace,点击扩展----管理扩展,然后如下图所示安装:

然后在镜像文件点击安装即可,我这里已经安装了,所以显示的是Repair,大家安装的时候可以选择Install:

安装好之后可以通过如下方式打开进行分析:点击扩展------点击ReSharper-------点击Profile-------点击 Run Application Performance Profiling,然后就可以召唤出调试选项啦,我这里使用的本地IIS站点调试,当然也可以直接附加到对应的进程上调试。

点击run之后刷新站点页面,将站点host到本地,准备好之后点击start开启分析,分析完成后点击Get Snapshot and Wait ,读取快照信息

当然还有一种方式,直接在单元测试上就可以开启分析:

DotTrace参数说明

在上图的使用说明中,我们可以看到如下几个参数,我比较推荐Tracing和Line-by-Line,其实就比较够用了。

Profiler Options 作用与描述 场景分析
Sampling 通过获取 CLR 内部一个方法开始执行和结束执行的时间差来计算的分析时间。这是最快的方法,它用于精确测量程序运行时间,但可能会丢失一些数据。使用此配置类型可使你快速获取应用程序的的总体性能。 这适用于大多数场景。尤其是如果你还没有对你的程序进行过任何性能分析的情况下,先使用这个选项进行一个初步分析大致确定性能问题是很方便的。
Tracing 慢于 Sampling 的方法,但是可以准确地测量特定方法被调用的准确次数。它是通过获取 CLR 内部一个方法开始执行和结束执行的时间差来计算的分析时间。 如果你使用 Sampling 分析方式得不到你想要的性能分析数据的时候,你可能用得到此选项。例如,当你分析算法复杂度,需要明确知道方法的调用次数,而不需要知道方法的准确执行时间的时候。
Line-by-line 通过收集代码执行的每条语句的时间来进行比较,它计算出的时间更加精确。该方法适用于你已经知道性能问题大概在哪里出现,并要找到具体某一个出现性能问题的时候。 当你已经通过其他方法得知性能问题出现在哪个具体的方法时你可能需要用到这个选项,这会分析此方法的每一行代码。
Timeline 采取抽样的方式,每隔一段时间 (10 ms),会暂停所有线程,并抓取堆栈里的信息,然后才计算出代码执行时间差。使用这个方式可能会导致一些执行时间少于 10 ms 的方法无法被抓取到。 推荐用于大多数情况,尤其是分析多线程应用程序的时候。你可以用这个选项来确定 UI 卡顿或不响应的原因,可以分析过多的 GC(垃圾回收),可以分析不均匀的工作负载分配、IO 不足或者其他各种异常。

DotTrace实践

接下来就来分别分析下代码慢的问题,由于涉及到公司的代码,不便使用其快照信息,我们自己写个单元测试看看它的性能怎么样。

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace UnitTestProject1
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            var result = 0;
            for (var i = 0; i < 1000; i++)
            {
                result += i + 10;
            }
            for (var i = 0; i < 10000; i++)
            {
                result = GetDouble(result);
            }
            Assert.IsNotNull(result);
        }
        public int GetDouble(int single)
        {
            return single * 2;
        }
    }
}

点击分析后获取到快照,然后在快照里搜索我们想要的方法:

搜索该方法,我们就可以看到该方法以及其调用的方法链中各个方法的调用时间,甚至能直接对比到每一行的代码性能损耗:

因为我们这个是比较简单的单元测试,所以前后耗时不过1毫秒。

当然我们选中方法,右击属性还可以看到具体单次调用时间,可以看到单次调用不过1us,可以说快的飞起。

写在最后

刚开始用这个工具玩儿的特别开心,感觉能透过表层直接看到本质,可以直接越过现象发现本质问题,项目中分析出了两个浅层不易发现的问题很开心,就像治病救人一样hhhh。发现jetbrains全家桶真的太强了,大佬说性能调优是迈向高阶开发的第一步,希望能越走越远吧。

相关文章
|
3月前
|
机器学习/深度学习 敏捷开发 测试技术
探索软件测试中的自动化策略:从基础到高级实践
【8月更文挑战第24天】在软件开发的快速迭代中,自动化测试成为确保质量和效率的关键。本文将引导你了解自动化测试的核心概念、工具选择、框架搭建,以及如何实施高效策略。我们将通过实际案例,探讨如何根据项目需求定制自动化测试流程,并克服常见挑战。无论你是自动化测试的新手还是寻求进阶的专家,这篇文章都将为你提供价值洞见和实用技巧。
50 3
|
3月前
|
敏捷开发 Java 测试技术
软件测试中的自动化策略:从基础到进阶
【8月更文挑战第31天】 本文深入探讨了软件测试自动化的重要性,并提供了一个实用的指南,以帮助读者理解如何实施自动化测试。文章首先介绍了自动化测试的基本概念,然后通过一个代码示例展示了一个简单的自动化测试脚本的创建过程。接着,文章逐步引导读者了解更高级的技术,如持续集成和测试框架的选择。最后,我们讨论了在自动化测试过程中可能遇到的挑战和相应的解决策略。
|
6月前
|
弹性计算 关系型数据库 数据库
利用阿里云进行性能优化:实践案例分享
在开发在线教育平台过程中,我们遇到了由于用户访问量增加而导致的性能瓶颈问题。通过使用阿里云的多种服务,包括RDS数据库、ECS弹性扩展、SLB负载均衡、OSS存储和CDN加速,我们对数据库、应用服务器和静态资源加载进行了全面优化。优化后的系统性能显著提升,数据库查询速度提高了60%,服务器负载下降了40%,静态资源加载时间减少了70%,从而极大改善了用户体验。本文详细介绍了问题分析、具体解决方案及其实施效果,旨在为其他开发者提供有价值的参考。
230 3
|
6月前
|
缓存 Java 数据库
后端性能优化的实践与经验分享
【5月更文挑战第15天】在互联网环境中,后端性能优化对提供卓越用户体验至关重要。关键领域包括:数据库优化(查询优化、索引优化、表结构优化、数据库维护)、缓存策略(内存缓存、CDN内容分发、HTTP缓存)、服务器配置优化(硬件升级、网络优化、操作系统调整)和代码优化(算法与数据结构、懒加载与异步处理、减少冗余计算、多线程与并发)。通过这些方法,可以提升响应速度,增强用户满意度,促进业务增长。
185 3
|
6月前
|
设计模式 敏捷开发 监控
深入探索软件测试:自动化与性能优化实践
【5月更文挑战第27天】 在软件开发生命周期中,测试阶段是保障产品质量和用户体验的关键环节。随着敏捷开发和持续集成的理念深入人心,自动化测试已成为提升效率、确保可靠性的重要手段。本文将深入探讨自动化测试的最佳实践,并结合性能优化策略,旨在为读者提供一套全面提升软件测试效能的技术方案。通过分析现代软件测试的挑战与机遇,我们将揭示如何有效整合自动化工具、框架选择、脚本开发、以及持续监控等多维度因素,打造一个高效、稳定的测试环境。
|
监控 网络协议 Java
【深入了解系统性能优化】「实战技术专题」全方面带你透彻探索服务优化技术方案(系统服务调优)
系统运行缓慢,执行速度较差虽然没有对用户或公司造成实质性的损失,但它从侧面反映出系统在某些方面存在问题。可能需要对系统参数进行优化,或者对系统的设计和交互进行调整,这是后续系统性能优化的一个重要过程。我们将继续努力优化系统,以确保其高效运行和良好性能,以提升用户体验并最大程度地满足业务需求。我们希望通过系统调优的历程,解决当前存在的问题,并不断改进系统的运行,为用户提供更好的服务。
356 0
【深入了解系统性能优化】「实战技术专题」全方面带你透彻探索服务优化技术方案(系统服务调优)
|
存储 缓存 监控
性能测试基础知识体系
网关层:网关是请求入口和业务接入层,一般登录验签调用、加解密鉴权、限流等操作,都是在网关进行;
性能测试基础知识体系
|
运维 监控 NoSQL
构建性能测试知识体系
构建性能测试知识体系
142 0
构建性能测试知识体系
|
Java 测试技术 应用服务中间件
软件测试面试题:交付一个性能测试项目,请阐述你的性能测试流程?
软件测试面试题:交付一个性能测试项目,请阐述你的性能测试流程?
167 0
|
测试技术 监控 弹性计算
阿里巴巴在应用性能测试场景设计和实现上的实践
提升性能前,先测试摸个底,找到性能瓶颈。 测试前,先设计好应用性能的测试场景,并实现它。 本文是《Performance Test Together》(简称PTT)系列专题分享的第5期,该专题将从性能压测的设计、实现、执行、监控、问题定位和分析、应用场景等多个纬度对性能压测的全过程进行拆解,以帮助大家构建完整的性能压测的理论体系,并提供有例可依的实战。
9297 9