Home

Awesome

PerfView Overview

PerfView is a free performance-analysis tool that helps isolate CPU and memory-related performance issues. It is a Windows tool, but it also has some support for analyzing data collected on Linux machines. It works for a wide variety of scenarios, but has a number of special features for investigating performance issues in code written for the .NET runtime.

If you are unfamiliar with PerfView, there are PerfView video tutorials. Also, Vance Morrison's blog gives overview and getting started information.

Getting PerfView

Please see the PerfView Download Page for the link and instructions for downloading the current version of PerfView.

PerfView requires .NET Framework 4.7.2 or later, which is widely available for all supported versions of Windows.

Are you here about the TraceEvent Library?

PerfView is built on a library called Microsoft.Diagnostics.Tracing.TraceEvent, that knows how to both collect and parse Event Tracing for Windows (ETW) and EventPipe (.NET Core trace) data. Thus if there is any information that PerfView collects and processes that you would like to manipulate yourself programmatically, you would probably be interested in the TraceEvent Library Documentation

Not Sure if you should use PerfView or TraceEvent?

See the scenarios document to determine which is the best choice for what you're trying to do.

Learning about PerfView

The PerfView User's Guide is part of the application itself. In addition, you can click the Users Guide link to see the GitHub HTML Source File rendered in your browser. You can also simply download PerfView using the instructions above and select the Help -> User's Guide menu item.

Asking Questions / Reporting Bugs

When you have question about PerfView, your first reaction should be to search the Users Guide (Help -> User's Guide) and see if you can find the answer already. If that does not work you can ask a question by creating a new PerfView Issue. State your question succinctly in the title, and if necessary give details in the body of the issue, there is an issue tag called 'question' that you should use as well that marks your issue as a question rather than some bug report. If the question is specific to a particular trace (*.ETL.ZIP file) you can drag that file onto the issue and it will be downloaded. This allows those watching for issues to reproduce your environment and give much more detailed and useful answers.

Note that once you have your question answered, if the issue is likely to be common, you should strongly consider updating the documentation to include the information. The documentation is pretty much just one file https://github.com/Microsoft/perfview/blob/main/src/PerfView/SupportFiles/UsersGuide.htm. You will need to clone the repository and create a pull request (see OpenSourceGitWorkflow for instructions for setting up and creating a pull request.

Reporting bugs works pretty much the same way as asking a question. It is very likely that you will want to include the *.ETL.ZIP file needed to reproduce the problem as well as any steps and the resulting undesirable behavior.

Building PerfView Yourself

If you just want to do a performance investigation, you don't need to build PerfView yourself. Just use the one from the PerfView Download Page. However if you want new features or just want to contribute to PerfView to make it better (see issues for things people want) you can do that by following the rest of these instructions.

Tools Needed to Build PerfView

The only tool you need to build PerfView is Visual Studio 2022. The Visual Studio 2022 Community Edition can be downloaded for free and has everything you need to fetch PerfView from GitHub, build and test it. We expect you to download Visual Studio 2022 Community Edition if you don't already have Visual Studio 2022.

In your installation of Visual Studio, you need to ensure you have the following workloads and components installed:

A .vsconfig file is included in the root of the repository that can be used to install the necessary components. When opening the solution in Visual Studio, it will prompt you to install any components that it thinks are missing from your installation. Alternatively, you can import the .vsconfig in the Visual Studio Installer.

If you get any errors compiling the ETWClrCompiler projects, it is likely because you either don't have the Windows 10 SDK installed, or you don't have the spectre-mitigated libs installed. Please refer to the troubleshooting section for more information.

Cloning the PerfView GitHub Repository.

The first step in getting started with the PerfView source code is to clone the PerfView GitHub repository. If you are already familiar with how GIT, GitHub, and Visual Studio 2022 GIT support works, then you can skip this section. However, if not, the Setting up a Local GitHub repository with Visual Studio 2022 document will lead you through the basics of doing this. All it assumes is that you have Visual Studio 2022 installed.

How to Build and Debug PerfView

PerfView is developed in Visual Studio 2022 using features through C# 7.3.

Deploying your new version of Perfview

You will want to deploy the 'Release' rather than the 'Debug' version of PerfView. Thus, first set your build configuration to 'Release' (Text window in the top toolbar, or right click on the .SLN file -> Configuration Manager -> Active Solution Configuration). Next build (Build -> Build Solution (Ctrl-Shift-B)). The result will be that in the src\perfView\bin\net462\Release directory there will be among other things a PerfView.exe. This one file is all you need to deploy. Simply copy it to where you wish to deploy the app.

Information for build troubleshooting.

Running Tests

PerfView has a number of *.Test projects that have automated tests. They can be run in Visual Studio by selecting the Test -> Run -> All Tests menu item. For the most thorough results (and certainly if you intend to submit changes) you need to run these tests with a Debug build of the product (see the text window in the top toolbar, it says 'Debug' or 'Release'). If tests fail you can right click on the failed test and select the 'Debug' context menu item to run the test under the debugger to figure out what went wrong.

Check in testing and code coverage statistica

This repository uses Azure DevOps to automatically build and test pull requests, which allows the community to easily view build results. The build and status reflected here is the Azure DevOps build status of the main branch.

Build Status

:warning: Builds produced by Azure DevOps CI are not considered official builds of PerfView, and are not signed or otherwise validated for safety or security in any way. This build integration is provided as a convenience for community participants, but is not endorsed by Microsoft nor is it considered an official release channel in any way. For information about official builds, see the PerfView Download Page page.

Contributing to PerfView

You can get a lot of value out of the source code base simply by being able to build the code yourself, debug through it or make a local, specialized feature, but the real power of open source software happens when you contribute back to the shared code base and thus help the community as a whole. While we encourage this it requires significantly more effort on your part. If you are interested in stepping up, see the PerfView Contribution Guide and PerfView Coding Standards before you start.

Code Organization

The code is broken into several main sections: