dotMemory 的新增功能
dotMemory 2025.2
错误修复和稳定性改进。
dotMemory 2025.1
之前,您只能在 Visual Studio 中使用 dotMemory 作为独立工具的入口点。 要进行性能分析和进一步分析,需要使用 dotMemory 的独立版本。 现在,dotMemory 已完全集成到 Visual Studio 中,允许您在不离开 IDE 的情况下同时进行性能分析和内存快照分析。
现在,您可以像在 dotTrace 中一样方便地管理工作区——dotMemory 会将所有工作区保存在临时存储中。 您可以根据最大存储大小或工作区的年龄配置自动清理工作区。 此功能适用于 dotMemory 的独立版本和 JetBrains Rider 中的 dotMemory。
dotMemory 2024.3
对象实例的创建堆栈跟踪视图
我们重新引入了 创建堆栈跟踪 视图,该视图在 UI 重新设计时曾被移除。 此视图显示了导致对象实例创建的函数调用堆栈,帮助您识别内存问题的根本原因。
对象集的回溯视图
我们重新引入了对象集的 反向跟踪 视图,该视图在 UI 重新设计时曾被移除。 此反向调用树显示了从创建特定对象集的函数开始的调用链,从下到上移动。
使用旭日图可视化调用树(所有操作系统)
现在,调用树可以显示为旭日图,突出显示分配最多内存的函数。 现在,此功能适用于 Windows、Linux 和 macOS 的 dotMemory 独立版本以及 JetBrains Rider 中的 dotMemory。
使用冰柱图可视化支配者(所有操作系统)
现在,支配者树可以显示为冰柱图,展示支配者和保留对象的内存消耗。 此功能适用于 Windows、Linux 和 macOS 的 dotMemory 独立版本以及 JetBrains Rider 中的 dotMemory。
用户界面改进
现在,所有操作系统上的 dotMemory 版本都具有统一的外观和体验。
小幅 UI/UX 改进。
dotMemory 2024.2.5
改进的视图导航
如果您打开的对象集仅包含一个元素(例如,若干
String对象),dotMemory 会自动切换到更相关的视图。 例如,您打开了一组字符串:之前:dotMemory 在 类型 视图中打开
String对象集,仅显示一个String项目,这需要手动切换到其他视图以进行进一步分析。现在:dotMemory 会自动在 类似保留 视图中打开该集合。 类型 视图已被禁用。
dotMemory 2024.2
改进的实例搜索
我们为 Instances 视图添加了新的过滤选项:
按字符串值搜索:在过滤字段中输入任意字符串值,dotMemory 将高亮显示匹配的字符串。 这使得根据内容查找特定字符串实例更加容易。
支持字符串值的正则表达式:使用正则表达式进行更高级的搜索。 例如,
^nAsso.{5,}ID$匹配nAssociatedObjectID.nAssociatedObjectID。按对象地址搜索:您还可以通过内存地址搜索对象实例。 这对于直接跟踪特定对象非常有用。
这些功能适用于 dotMemory 的独立版本和 JetBrains Rider 中的 dotMemory。
Linux 和 macOS 上的 dotMemory 改进
Linux 和 macOS 版本的 dotMemory 获得了之前仅在 Windows 上可用的功能:
自动内存检查 :Linux 和 macOS 版本的 dotMemory 获得了 检查 视图,该视图显示了若干自动检测的内存问题。
跨工作区快照比较 :现在,您可以比较来自不同性能分析会话的快照。
调用树 :Linux 和 macOS 的 dotMemory 独立版本以及 Windows、Linux 和 macOS 的 JetBrains Rider 中的 dotMemory 现在都拥有 调用树 视图。
这些功能适用于 dotMemory 的独立版本和 JetBrains Rider 中的 dotMemory。
使用旭日图可视化调用树
现在,调用树可以显示为旭日图,突出显示分配最多内存的函数。 此功能适用于 Linux 和 macOS 的 dotMemory 独立版本以及 Windows、Linux 和 macOS 的 JetBrains Rider 中的 dotMemory。
dotMemory 2024.1
现在,您可以分析基于 MAUI 框架的应用程序。 目前,dotMemory 支持分析针对 .NET 7.0+ 的 WinUI 应用程序(Windows 上)。 此支持适用于 dotMemory 独立版本以及集成到 Rider 和 ReSharper 中的 dotMemory。
改进的 macOS 支持
现在,dotMemory 的独立版本允许您指定应用程序包(.app)而不是可执行文件。
Rider 中的 dotMemory 可以分析 macOS 运行配置。 支持的目标框架包括:net7.0-macos、net8.0-macos。
Linux 和 macOS 上的 dotMemory 新视图
Linux 和 macOS 上的 dotMemory 独立版本更接近其 Windows 版本,提供以下功能:
用于分析对象集的 类似保留 视图
用于分析支配对象的 旭日图 图表
支持冻结对象堆
冻结对象堆中不可变对象的信息显示在时间轴、 堆碎片 图表和 代系 视图中。
dotMemory 2023.3
Linux 和 macOS 上的 dotMemory 独立版本
现在,您可以在 Linux 和 macOS 操作系统上运行 dotMemory 的独立版本。
在 Linux 上分析进程转储
dotMemory 允许您将进程转储导入并作为常规快照进行分析。 此功能现已在 Linux 上可用。 请注意,Linux 版本的 dotMemory 仅允许导入在 Linux 上收集的转储。
dotMemory 2023.2
在 JetBrains Rider 中分析快照
在 2023.2 之前,您只能在 Rider 中使用 dotMemory 进行内存分配分析。 在 2023.2 中,您可以像在 dotMemory 独立版本中一样,在 Rider 中收集内存快照并进行分析。
快照分析可在 Windows、Linux 和 macOS 上使用。
在 Windows 上,您还可以导入和分析进程转储。
某些功能和视图不可用,例如自动快照检查和创建堆栈跟踪视图。
dotMemory 2023.1
各种改进
性能改进和错误修复。
dotMemory 2022.3
.NET 7 支持
dotMemory 现在允许您在 Windows、macOS 和 Linux 上分析 .NET 7 应用程序。
请注意,您可能会遇到以下问题:
如果您的应用程序创建动态程序集,分析器将不会显示这些程序集中的数据(方法名称和对象类型)。 它们将显示为 未解决。
如果通过将分析器附加到应用程序来分析它,应用程序可能会在会话期间崩溃。
这两个问题将在即将发布的 .NET 7 错误修复版本中解决。
改进的 ARM CPU 支持
Linux arm32 – 现在,您可以在 Linux 上的 arm32 CPU 上运行 dotMemory 命令行分析器。 支持的框架:.NET Core 3.1、.NET 5.0 - 7.0。
Windows arm64 – 现在,您可以在 Windows 上的 arm64 CPU 上使用 dotMemory。 这适用于所有版本:dotMemory 独立版本、Rider 中的 dotMemory、Visual Studio 中的 dotMemory 和 dotMemory 命令行工具。
JetBrains Rider 中的 dotMemory(Linux 和 macOS)
除了 Windows,dotMemory 现在也可用于 Linux 和 macOS 上的 JetBrains Rider:
在 运行 小部件和 运行 | 切换分析器配置 菜单中提供了两种新的分析模式——内存(采样分配) 和 内存(完整分配)。
从 运行 菜单中将分析器附加到正在运行的进程。
实时观察 时间线 图表展开。 选择一个时间间隔并打开 内存分配 视图。 它等同于 dotMemory 独立版本中的相同视图,允许您分析分配的对象和特定时间范围内的分配调用树。
请注意,此版本中不支持收集内存快照。
dotMemory 命令行分析器的改进
命令行分析器新增了
--saving-mode参数,允许您设置保存 dotMemory 工作区的条件。--saving-mode=always|has-snapshot|postponed:always– (默认)在分析会话结束后保存工作区has-snapshot– 仅在工作区包含至少一个快照时,在会话结束时保存工作区postpone– 仅在会话结束时保存工作区,前提是收到标准输入消息## dotMemory["confirm-save"]
dotMemory 2022.2
JetBrains Rider 中的 dotMemory
dotMemory 现在可用于 JetBrains Rider IDE:
在 运行 小部件和主菜单中的 运行 | 切换分析器配置 提供了两种新的分析模式——内存(采样分配) 和 内存(完整分配)。
从 运行 菜单中将分析器附加到正在运行的进程。
实时观察 时间线图 展开。 选择一个时间间隔并打开 内存分配 视图。 它等同于 dotMemory 独立版本中的相同视图,允许您分析分配的对象和特定时间范围内的分配调用树。
Rider 中的 dotMemory 在 2022.2 版本中不允许收集快照。
dotMemory 2022.1
dotMemory 命令行工具现在支持 Alpine 3.13–3.15 版本。 支持以下 CPU 和框架:
x64:.NET Core 3.1、.NET 5.0–6.0。
arm64:.NET 5.0–6.0。
现在,您只需将特殊图标拖放到应用程序窗口即可将分析器附加到正在运行的应用程序。
使用分析 API 获取快照时,您现在可以使用
DotMemory.GetSnapshot("snapshot name");指定快照名称。该名称将显示在 dotMemory 的 主页 | 快照 页面上。类似保留 视图现在处理数据的速度更快。
dotMemory 命令行工具现在在保存快照时显示其进度。
假设您分析一个创建了许多托管子进程的根进程,而您希望分析这些子进程。 出于某种原因(例如,它可能是一个 shell 脚本、本机进程,或者您只是通过进程过滤器排除了它),根进程本身被排除在分析之外。
之前 :分析器开始分析与过滤器匹配的任何子进程。 一旦子进程完成,分析器会等待一秒钟。 如果在此时间内没有启动新的子进程,分析器将完成分析会话。 如果根进程以更长的延迟启动子进程,这可能会成为一个问题。
现在 :在根进程运行时,分析器不会停止分析会话。 一旦根进程停止运行,分析器将切换到一秒延迟的方法。 (编辑后)
dotMemory 2021.3
.NET 6 支持
dotMemory 现在允许您在 Windows、macOS 和 Linux 上分析 .NET 6 应用程序。 请注意,要在 Linux 和 macOS 上分析应用程序,您需要使用 dotMemory 命令行分析器。
支持 Apple M1
现在,dotMemory 命令行工具可以在配备 Apple M1 处理器的计算机上运行。 该工具支持 .NET 6 应用程序(本机模式)和 .NET 5 应用程序(Rosetta 2 模式)的分析。
现在,dotMemory 可以基于 ETW 事件获取关于内存分配的采样数据。 与传统的(统计)收集分配数据的方式相比,采样的详细程度较低,但提供了许多优势:采样分配数据的收集不会带来性能损失。 您无需显式启用此数据的收集,它始终处于开启状态。 当您将分析器附加到已运行的应用程序时,也可以收集采样分配数据。 请注意,此功能仅在 Windows 上可用。
现在,您可以使用 子系统 视图分析内存分配数据。 子系统将所有属于同一类型、命名空间或程序集的方法分组。 结果视图显示了由子系统创建的对象以及每个子系统的合并调用树。
性能改进
我们完全重新设计了支配者树(对象保留图)背后的算法。 即使对象集包含数亿个对象,dotMemory 也能在几分钟内打开特定视图。
dotMemory 2021.2
在此版本中,我们继续改进内存分配分析的方式。 内存分配 视图新增了两个维度:
方法 允许您分析分配内存的方法的纯列表。
调用树 允许您分析分配调用树。 树中的每个节点不仅显示被调用的方法,还显示调用分配的对象。
视图过滤器(dotMemory 视图顶部的搜索栏)变得更加灵活和清晰:
过滤器新增了选项以缩小搜索范围:
#struct(仅在值类型中搜索)、#c(仅在类型中)、#m(仅在方法中)、#ns(仅在命名空间中)。您可以获取当前上下文中所有可能过滤器的内置帮助。
现在,您可以:
在导出对象数据时指定遍历深度。
选择一个或多个类型并将这些数据导出到单个文件。
从 实例、 传出引用 和 不可达对象 视图中导出对象数据。
各种改进
控制台分析器 :现在,您可以通过服务消息启用/禁用内存分配数据的收集。
复制到剪贴板的堆栈跟踪现在会自动在 Rider / Visual Studio 中通过 ReSharper 打开。
各种错误修复。
dotMemory 2021.1
我们完全重新设计了 dotTrace 的主页界面。 现在,配置和启动新的性能分析会话、管理工作区以及执行其他基本操作变得更加容易。
现在,您可以使用
gcore或dotnet-dump分析在 Linux 系统上收集的 .NET Core 应用程序转储。现在,dotMemory 允许您在任意时间间隔内分析内存分配。 只需在时间轴上选择时间间隔, 内存分配 视图将显示在此间隔内分配的对象以及分配它们的堆栈跟踪。
dotMemory 2020.3
.NET 5 支持
dotMemory 现在允许您在 Windows、macOS 和 Linux 上分析 .NET 5 应用程序。 请注意,要在 Linux 和 macOS 上分析应用程序,您需要使用 dotMemory 命令行分析器。
dotMemory 使用时间轴数据直接在时间轴图表上提供自动检查。 目前,有三种检查可用:
高垃圾回收压力
Gen0 中的固定对象
快速增长的大对象堆
.NET 5 引入了一个单独的堆段用于存储固定对象——这些对象无法在堆中移动,导致堆碎片化。 dotMemory 在堆碎片视图中显示固定对象堆。 此外,现在 dotMemory 在分析过程中实时显示分配到固定对象堆的内存。
各种时间轴改进
垃圾回收显示在主时间轴下方的单独图表中。
现在,您可以在时间轴上选择特定的时间范围:所选时间范围的垃圾回收时间和分配的内存信息将显示出来。
性能改进。
dotMemory 2020.2
dotMemory 命令行分析器 获得了对 Linux 和 macOS 的支持。
适用于 Linux 的 dotMemory 命令行分析器(任何带有 GLIBC_2.23 或更高版本的发行版)允许您在 ARM64 系统上分析应用程序。
您可以将 固定对象 作为单独的对象集打开。
您可以将 无法从 GC 根访问的对象 作为单独的对象集打开。
dotMemory 2020.1
错误修复和稳定性改进。
请注意,我们还重新设计了内部数据格式。 这意味着 dotMemory 2020.1 快照格式与早期版本不兼容。 同时,这将使我们能够在未来的版本中引入一些新功能。
dotMemory 2019.3
dotMemory 2019.2
dotMemory 控制台分析器改进。
dotMemory 2019.2 停止支持远程分析。 为了为您提供合适的替代方案,我们显著改进了 dotMemory 控制台分析器:
控制台分析器几乎等同于独立版本的 dotMemory。 您可以使用控制台工具获取以下内容的快照:
.NET Core 应用程序,
IIS Express 托管的应用程序,
Windows 服务,
UWP 应用程序,
WCF 服务库,
或任何在您运行分析会话后启动的 .NET 应用程序。
现在,控制台分析器可以在条件允许的情况下立即获取内存快照。 此功能在您希望获取基线快照并用于比较时非常有用。
按需快照处理。
您可以在数据完全处理完成之前开始使用快照。
.NET Core 3.0 完全支持。
dotMemory 现在可以附加到 .NET Core 3.0 Preview 7 进程。
改进了对 Visual Studio 中 ASP.NET Core 应用程序的支持:
正确支持不同的托管模型,
在启动分析会话时会考虑浏览器设置和 启用 SSL,
支持 ASP.NET Core 3.0 Preview 7,
以及其他改进……
分析 API 获得了从被分析进程分离的能力。
不再支持 Silverlight 和 WebDev 应用程序。
dotMemory 2019.1
dotMemory 2018.3
按条件改进的快照获取。 分析控制器获得了一个新的快照获取条件: 如果总内存使用量超过 X MB,则获取快照。
改进的时间轴图表 。点击图表即可获取特定时间点的精确内存数据。
重新设计的 IIS Express 分析设置。 现在,分析托管在 IIS Express 上的 Web 应用程序的默认方式是为 dotMemory 提供一个
applicationhost.config文件。
dotMemory 2018.2
运行配置的分析。 集成到 Visual Studio 中的 dotMemory 获得了更多的分析功能。 现在,您不仅可以分析启动项目,还可以分析任何“运行配置”——启动项目、任意可执行文件,甚至是任何静态方法。
时间轴现在适用于所有类型的应用程序,包括 .NET Core、ASP.NET Core、IIS 托管的 Web 应用程序等。
时间轴包含一个新的 自垃圾回收以来已在 LOH 中分配 图表。 该图表显示了分配到大对象堆的即时内存分配,对于检测大对象的过度分配非常有帮助。
现在, 可终结对象 检查不仅适用于通过 dotMemory 捕获的快照,还适用于原始内存转储。 此外,现在可终结对象被视为存在于快照/转储中的对象,因此您可以打开它们并进行更深入的检查。
两个新的根类型: F-Reachable Queue / Finalization Queue。
dotMemory 命令行工具允许您为获取的快照设置名称。
dotMemory 2018.1
改进的用户界面。 2018.1 版本带来了多项用户界面的细微改进。 最显著的变化是重新设计的 分析对象 面板。 现在,导航您的分析路径变得更加容易。
dotMemory 2017.3
改进的搜索。 现在,在对象集视图中搜索特定对象时,您可以通过使用特殊符号使搜索更高效。
dotMemory 2017.2
导入内存转储。 现在,您可以导入 Windows 原始内存转储(通常通过任务管理器或进程资源管理器工具获取)并使用 dotMemory 的全部功能进行分析。
改进的“按支配者分组”视图。 按支配者分组 视图经过重新设计,使您更容易理解应用程序中的关键对象。 支配者树现在与支配者旭日图结合在一起。
改进的用户界面。 dotMemory 的用户界面经过轻微重新设计,使分析主题和视图的导航更加便捷。 此项工作的额外好处是增加了视图区域。
dotMemory 2017.1
命令行分析器。 dotMemory 2017.1 包含了 dotMemory.exe 工具,允许您通过命令行进行分析。 当您需要自动化收集内存快照的过程时,该工具非常有用。
dotMemory 2016.3
可终结对象检查。 dotMemory 检查您的应用程序中的已终结对象和排队等待终结的对象。
dotMemory 2016.2
比较不同会话的快照。 dotMemory 允许您比较存储在不同工作区中的内存快照:即,在不同分析会话中收集的快照。
dotMemory 2016.1
浏览视图历史记录。
dotMemory 10
dotMemory 主页视图。
dotMemory 获得了一个类似于最近版本 dotTrace 中可用的主页视图。