C#开发过程中我们在分析软件中可以使用一些软件分析代码中存在的问题,本文我们分享两个软件

  • DotMemory
  • DotTrace

1. DotMemory和DotTrace

dotTrace 是一个包含了可用于.NET应用程序的性能分析器(dotTrace Performance) 和内存分析器(dotTrace Memory)的套件。

dotTrace Performance可帮助用户对各种.NET框架内的应用程序的性能瓶颈进行检测,能够帮助.Net开发者以最快的方式找到并移除性能上的瓶颈。

dotTrace Memory 则能帮助用户发现内存泄露并能对基于.NET 4.0以上框架的应用程序进行内存占用优化。

1.1. 安装软件

在这里插入图片描述
在这里插入图片描述

选择Crack

在这里插入图片描述
在这里插入图片描述

最后我们打开VS即可。

1.2. 软件介绍

借对 C#、VB.NET、XAML、JavaScript、TypeScript、JSON、XML、HTML、CSS、ASP.NET、ASP.NET MVC、Protobuf、NAnt 和 MSBuild 脚本的无与伦比的支持,包括全面的跨语言功能,JetBrains ReSharper 将为您提供帮助任何 Visual Studio 用户都可以编写更好的代码,轻松检查和重构现有代码库。

您可以花更少的时间在例行的、重复性的手工工作上,而是专注于手头的任务。一组强大的自动错误检查和代码纠正功能可缩短开发时间并提高您的效率。您会发现 ReSharper 在提高开发人员生产力和提高代码质量方面迅速收回了成本。借助 ReSharper,.NET 开发人员可以真正体验到我们所说的“开发的驱动力”的意思。

1.2.1. DotTrace

在线官方文档:
https://www.jetbrains.com/help/profiler/Introduction.html

dotTrace 可以说是 .NET 性能分析最方便的工具。

dotTrace 可让您发现各种 .NET 应用程序中的性能瓶颈,包括基于 .NET Framework、.NET Core、Mono 和 Unity 版本的 Mono 的应用程序。

1.2.1.1. 基本概念

dotTrace 提供了两种分析应用程序的方法:

  1. 性能分析

在性能分析期间,dotTrace 收集调用堆栈数据和有关调用计时的数据。换句话说,性能分析可以让您查看执行特定方法所需的时间、调用频率以及跟踪方法调用路径。

  • 何时使用性能分析(性能分析在以下情况下很有用:)

    • 评估整体应用性能。

    • 查找应用程序瓶颈 - 代码中最慢的部分。

    • 调查特定方法中的性能问题。

为了收集性能数据,dotTrace 中断应用程序执行并检索调用堆栈数据。很明显,这种分析的结果将根据分析器收集数据的频率而有所不同。如果很少这样做,您可能会错过一些短调用(在数据收集之间进行)。同时,由于探查器开销低,探查器计算的调用时间值将非常准确。相反,如果过于频繁地收集调用堆栈数据(例如,在每次调用进入和退出时),您将获得不准确的时间值(分析器开销很大),但有关已执行调用的数量却非常准确。为了以某种方式解决这一矛盾并让您在准确的时间和电话号码测量之间取得平衡,dotTrace 提供了三种不同的性能分析类型。了解有关类型的更多信息分析类型。

  1. 时间线分析

在时间线分析期间,dotTrace 记录应用程序事件并写入有关分析会话期间应用程序状态如何变化的数据。这些不仅包括临时调用堆栈和线程状态数据,还包括有关内存分配、垃圾收集和 I/O 操作的临时数据。

会话完成后,可以在时间线查看器中分析分析结果,时间线查看器在时间线图上显示记录的事件。

时间线分析基于 Windows 事件跟踪 (ETW)。

  • 何时使用时间线分析

    • 发现应用程序瓶颈。

    • 确定用户界面冻结的原因。

    • 识别过多的垃圾收集和 I/O 操作。

    • 确定多线程应用程序中的问题,例如不规则的工作分配、锁争用、序列化执行等。

  • 时间线和性能分析之间的差异

    • 在大多数情况下,这两种分析方法是可以互换的。两者都收集调用堆栈数据并允许确定性能瓶颈。

    • 时间线分析的主要好处是,它不仅可以让您查看应用程序进行了哪些调用,还可以查看这些调用是如何及时分布的。这在分析事件的时间顺序确实很重要的多线程应用程序的行为时非常有用:例如,在确定同步延迟、UI 冻结的原因等方面。

    • 另一个好处是时间线分析收集了更广泛的数据。除了调用堆栈数据外,它还记录内存分配、垃圾回收和 I/O 事件。

    • 那么,有什么缺点呢?首先,与跟踪性能分析类型不同,时间线分析无法确定执行调用的确切数量。因此,它几乎不能用于分析算法的复杂性。

    • 另一个问题是时间线分析意味着完全不同的数据表示 - 它使用时间线查看器,这是一组过滤器和图表,用于处理事件时间线。因此,性能分析及其性能查看器界面更适合更直接的“什么是最慢的方法?” 情景。

  1. 分析器运行模式
序号 类型名称 功能描述
1 Sampling 通过获取CLR内部一个方法和结束执行的时间差来计算的分析时间。这是最快的方法,它用于精确测量程序运行时间,但可能会丢失一些数据。使用此配置类型可使你快速获取应用程序的总体性能
2 Tracing 慢于Sampling的方法,但是可以准确地测量特定方法被调用的准确次数。他是通过获取CLR内部一个方法开始执行和结束执行的时间差来计算的分析时间。
3 Line-by-line 通过手机代码执行的每条语句的时间来就行比较,她计算出的时间更加精确。该方法适用于你已经知道性能问题大概在哪里出现,并要找到具体某一个出现性能问题的时候。
4 Timeline 采取抽样的方式,每个一段时间(10ms),会暂停所有线程,并抓取堆栈里的信息,然后才计算出代码执行时间差。使用这个方式可能会导致一些执行时间少于10ms的方法无法被抓取到。
1.2.1.2. 开始使用性能分析

可以大力参考官方文档:https://www.jetbrains.com/help/profiler/Other_Profiling_Scenarios.html

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2.2. DotMemory

dotMemory 是一种内存分析工具,可让您分析任何基于 .NET 的应用程序的内存使用情况。这包括独立应用程序(例如,用 C# 或 VB.NET 编写的)、ASP.NET Web 应用程序、任意 .NET 进程等。

https://www.jetbrains.com/help/dotmemory/Introduction.html

1.2.2.1. 基本概念

dotMemory 收集正在运行的 .NET 进程的内存使用数据。然后,数据以多个视图呈现给您,这些视图为内存中的对象提供了不同的视角。

dotMemory 允许您回答许多与应用程序的内存使用相关的问题:

  • 为什么这个对象还在内存中(是什么导致了内存泄漏)?

  • 什么需要这么多内存?

  • 垃圾收集如何影响应用程序性能(例如,高内存流量)?

  • 是否违反了任何内存分配/分布模式?

然而,紧急情况(当您已经有内存问题时)并不是内存分析的唯一原因。dotMemory 也是日常基本使用的绝佳工具。例如,在对代码应用更改或引入新算法后运行 dotMemory。dotMemory 将立即向您展示事情的进展情况——是变好还是变坏。将 dotMemory 的使用作为您的必备例程之一将帮助您即时改进您的代码。

1.2.2.2. 开始使用内存分析

在这里插入图片描述
在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐