perfview

perfview

免费性能分析工具 聚焦CPU和内存问题

PerfView是一款开源的性能分析工具,主要用于诊断CPU和内存相关的性能问题。它适用于Windows平台,也能分析Linux系统的数据。PerfView在多种场景下都很实用,尤其擅长分析.NET运行时代码性能。该工具提供ETW事件解析、对象分配堆栈跟踪和.NET方法调用跟踪等功能。PerfView还支持扩展,可满足不同用户的需求。开发人员和性能优化专家可以利用PerfView来提升软件性能。

PerfView性能分析ETW.NET调试工具Github开源项目

PerfView 概览

PerfView 是一款免费的性能分析工具,可帮助隔离 CPU 和内存相关的性能问题。它是一款 Windows 工具,但也支持分析在 Linux 机器上收集的数据。它适用于各种场景,但对于调查 .NET 运行时编写的代码的性能问题有一些特殊功能。

如果您不熟悉 PerfView,可以观看 PerfView 视频教程。 此外,Vance Morrison 的博客 提供了概述和入门信息。

获取 PerfView

请查看 PerfView 下载页面 获取下载当前版本 PerfView 的链接和说明。

PerfView 需要 .NET Framework 4.7.2 或更高版本,该版本在所有受支持的 Windows 版本上都广泛可用。

您是来了解 TraceEvent 库的吗?

PerfView 基于名为 Microsoft.Diagnostics.Tracing.TraceEvent 的库构建,该库知道如何收集和解析 Event Tracing for Windows (ETW) 和 EventPipe (.NET Core 跟踪) 数据。因此,如果您想以编程方式操作 PerfView 收集和处理的任何信息,您可能会对 TraceEvent 库文档 感兴趣。

不确定是否应该使用 PerfView 还是 TraceEvent?

查看 场景 文档,确定哪个最适合您要做的事情。

了解 PerfView

PerfView 用户指南是应用程序本身的一部分。此外,您可以点击 用户指南链接 在浏览器中查看 GitHub HTML 源文件。您也可以按照上述说明下载 PerfView,然后选择"帮助 -> 用户指南"菜单项。

提问/报告错误

当您对 PerfView 有疑问时,首先应该搜索用户指南(帮助 -> 用户指南),看看是否已经找到答案。如果还是没有解决,您可以通过创建 新的 PerfView 问题 来提问。 在标题中简洁地说明您的问题,如有必要,在问题正文中提供详细信息。使用名为"question"的问题标签,将您的问题标记为问题而不是错误报告。 如果问题与特定跟踪文件(*.ETL.ZIP 文件)有关,您可以将该文件拖到问题上,它将被下载。 这使关注问题的人能够重现您的环境,并给出更详细和有用的答案。

请注意,一旦您的问题得到解答,如果该问题可能是常见的,您应该认真考虑更新文档以包含这些信息。文档基本上只是 一个文件 https://github.com/Microsoft/perfview/blob/main/src/PerfView/SupportFiles/UsersGuide.htm。 您需要克隆存储库并创建拉取请求(有关设置和创建拉取请求的说明,请参阅 OpenSourceGitWorkflow)。

报告错误的方式与提问基本相同。您很可能需要包含重现问题所需的 *.ETL.ZIP 文件以及任何步骤和导致的不良行为。

自行构建 PerfView

如果您只想进行性能调查,不需要自己构建 PerfView。 只需使用 PerfView 下载页面 上的版本即可。 但如果您想要新功能或只是想为 PerfView 做出贡献以使其变得更好 (查看 问题 了解人们想要的功能), 您可以按照以下说明进行操作。

构建 PerfView 所需的工具

构建 PerfView 只需要 Visual Studio 2022 和 .NET Core SDK。可以免费下载 Visual Studio 2022 社区版,它与 .NET Core SDK 一起提供了从 GitHub 获取 PerfView、构建和测试所需的一切。如果您还没有 Visual Studio 2022,我们希望您 下载 Visual Studio 2022 社区版。 PerfView主要是C#代码,但也有少量C++代码用于实现PerfView的一些高级功能(ETWCLrProfiler dll允许PerfView拦截.NET方法调用;参见收集对话框中的.NET调用)。如果您下载了Visual Studio 2022社区版,它默认不安装C++编译工具,也不包含Windows 10 SDK。因此,安装Visual Studio 2022时,请选中"使用C++的桌面开发"选项,然后查看右侧窗格中的可选子组件,确保也选中了Windows 10 SDK(通常默认未选中)。安装最新版本应该没问题。如果您已经安装了Visual Studio 2022,可以通过启动Visual Studio安装程序并修改安装来添加这些选项。这将使您能够选择"使用C++的桌面开发"和"Windows 10 SDK"选项。

如果编译ETWClrProfiler* dll时出现任何错误,很可能与获取Win 10.0 SDK有关。如果需要更多帮助,请参阅下面的疑难解答部分。

克隆PerfView GitHub存储库

开始使用PerfView源代码的第一步是克隆PerfView GitHub存储库。如果您已经熟悉GIT、GitHub和Visual Studio 2022 GIT支持的工作方式,可以跳过本节。但如果不熟悉,"使用Visual Studio 2022设置本地GitHub存储库"文档将指导您完成基本步骤。它只假设您已安装Visual Studio 2022。

如何构建和调试PerfView

PerfView在Visual Studio 2022中开发,使用C# 6的功能。

  • 解决方案文件是PerfView.sln。在Visual Studio中打开此文件(或在Windows资源管理器中双击它),然后选择"生成"->"生成解决方案"即可构建。您也可以使用msbuild或存储库根目录下的build.cmd文件从命令行构建非调试版本。构建遵循标准Visual Studio约定,生成的PerfView.exe文件最终位于src/PerfView/bin/BuildType/PerfView.exe。您只需部署这一个EXE即可使用。

  • 解决方案包含几个项目,代表支持DLL和主EXE。要在调试器中运行PerfView,您需要确保将"启动项目"设置为"PerfView"项目,以便启动主EXE。如果解决方案资源管理器(右侧)中的PerfView项目不是粗体,请右键单击PerfView项目并选择"设为启动项目"。完成此操作后,"开始调试"(F5)应该可以正常工作。

部署新版本的PerfView

您需要部署PerfView的"Release"版本而不是"Debug"版本。因此,首先将构建配置设置为"Release"(顶部工具栏中的文本窗口,或右键单击.SLN文件->配置管理器->活动解决方案配置)。然后构建(生成->生成解决方案(Ctrl-Shift-B))。结果将在src\perfView\bin\net462\Release目录中生成PerfView.exe等文件。您只需要这一个文件来部署。只需将其复制到您希望部署应用程序的位置即可。

构建故障排除信息

  • PerfView的一个不寻常之处在于它将支持DLL合并到EXE本身中,这些DLL会在首次启动时解压。这意味着构建中存在一些不典型的复杂依赖关系。如果之前的构建出现问题,您会看到某些DLL找不到的错误。通常,您可以通过执行正常(非清理)构建来解决这个问题,因为缺失的文件将从上次编译中存在。如果这无法解决问题,请检查所需的DLL是否实际存在(如果存在,则重新构建应该可以解决问题)。逐个构建项目以查看哪个项目最先失败可能会有帮助。

  • PerfView的另一个不寻常之处在于它包含一个扩展机制以及示例。这个扩展机制是"Global"项目(之所以这样命名,是因为它是全局扩展,其命令没有明确的"作用域"),需要引用PerfView来解析一些引用。因此,在"Global"项目中会出现许多"未找到"问题。在您使其他所有部分的构建正常工作之前,可以忽略这些问题。

  • 存储库的一个不变性是,如果你使用Visual Studio 2022并简单地同步和构建PerfView.sln文件,它应该"正常工作"。如果没有实现这一点,且上述建议无法解决问题,那么我们需要修复存储库或更新上述建议。因此,提交GitHub问题是合理的。如果你这样做,目标是解决问题,这意味着你需要在问题中提供足够的信息来实现这一点。这包括你尝试的具体内容以及错误消息是什么。

  • 你也可以从命令行构建PerfView(但仍需安装Visual Studio 2022)。这是一个两步过程。首先,你必须恢复所有需要的nuget包,然后进行构建。步骤如下:

    1. 打开开发者命令提示符。你可以通过按Windows键(在空格键旁边)并输入"开发者命令提示符"来实现。你应该会看到一个可以选择的条目(如果安装了Visual Studio 2022)。
    2. 切换到PerfView源代码树的根目录(PerfView.sln所在的位置)。
    3. 通过输入命令'msbuild /t:restore'来恢复nuget包。
    4. 通过输入命令'msbuild'来构建PerfView。
  • 如果你遇到错误"MSB8036: 未找到Windows SDK版本10.0.17763.0",或者遇到'assert.h'未找到的错误,或者任何与构建ETWClrProfiler dll相关的错误,你应确保已安装Windows 10.0.17763.0 SDK。不幸的是,除非你明确要求,否则这个库往往不会随Visual Studio一起安装。要修复这个问题,启动Visual Studio安装程序,修改安装,然后在C++桌面开发下查看并确保选中了Windows SDK 10.0.17763.0选项。如果没有,选中它并继续。然后再次尝试构建PerfView。

运行测试

PerfView有多个*.Test项目,包含自动化测试。可以在Visual Studio中通过选择"测试 -> 运行 -> 所有测试"菜单项来运行这些测试。为了获得最全面的结果(尤其是如果你打算提交更改),你需要使用产品的Debug版本运行这些测试(查看顶部工具栏中的文本窗口,它显示"Debug"或"Release")。如果测试失败,你可以右键单击失败的测试,选择"调试"上下文菜单项,在调试器下运行测试以找出问题所在。

检入测试和代码覆盖率统计

此存储库使用Azure DevOps自动构建和测试拉取请求,这使社区可以轻松查看构建结果。此处反映的构建和状态是main分支的Azure DevOps构建状态。

构建状态

:警告: Azure DevOps CI生成的构建不被视为PerfView的官方构建,它们未经签名,也未经任何方式验证其安全性。提供此构建集成是为了方便社区参与者,但它不被Microsoft认可,也不被视为任何形式的官方发布渠道。有关官方构建的信息,请参阅PerfView下载页面

为PerfView做贡献

仅仅能够自己构建代码,通过它进行调试或制作本地的专门功能,你就可以从源代码库中获得很多价值,但开源软件的真正力量在于你向共享代码库贡献,从而帮助整个社区。虽然我们鼓励这样做,但这需要你付出更多的努力。如果你有兴趣更进一步,请在开始之前查看PerfView贡献指南PerfView编码标准

代码组织

代码分为几个主要部分:

  • PerfView - 应用程序的图形用户界面部分
  • StackViewer - 任何带有"stacks"后缀的视图的图形用户界面代码
  • EventViewer - "events"视图窗口的图形用户界面代码
  • Dialogs - 各种小型对话框的图形用户界面代码(尽管CollectingDialog相对复杂)
  • Memory - 包含内存调查的代码,特别是定义了用于显示节点-弧图(如GC堆)的"Graph"和"MemoryGraph"
  • TraceEvent - 用于解码Windows事件追踪(ETW)的库,该库用于为许多调查实际收集数据
  • MainWindow - 最初启动的窗口的图形用户界面代码(允许选择文件或收集新数据)
  • ETWClrProfiler* - 有两个项目构建相同的源代码,分别为32位和64位。这是PerfView中唯一的本机代码项目,实现了CLR Profiler API并发出ETW事件。它用于跟踪对象分配堆栈和.NET方法调用。
  • HeapDump* - 此项目有32位和64位版本。这些是独立的可执行文件,可以使用Microsoft.Diagnostics.Runtime API转储GC堆。这允许从调试器进程转储中获取堆转储。
  • Global - 使用PerfView可扩展性机制的示例
  • CSVReader - 旧代码,允许PerfView读取由XPERF生成的.ETL.CSV文件(可能会删除)
  • Zip - System.IO.Compression.dll的克隆,使PerfView可以在V4.5之前的运行时上运行(可能会删除)

编辑推荐精选

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

下拉加载更多