# microsoft/perfview

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/microsoft-perfview).**

4,633 stars · 757 forks · C# · mit

## Links

- GitHub: https://github.com/microsoft/perfview
- Homepage: http://channel9.msdn.com/Series/PerfView-Tutorial
- awesome-repositories: https://awesome-repositories.com/repository/microsoft-perfview.md

## Topics

`dotnet` `dotnet-core` `performance` `performance-analysis` `windows`

## Description

PerfView is a set of integrated profiling and tracing tools built on Windows Event Tracing for Windows (ETW), designed to diagnose CPU, memory, and ETW-based performance issues in .NET applications. It captures ETW events to analyze runtime behavior, CPU usage, and memory allocations, serving as a .NET performance profiler that measures both CPU time and garbage collection events.

The tool distinguishes itself with a diff comparison engine that compares two performance traces side-by-side to highlight changes in method costs and event rates. It renders profiled call stacks as flame graphs where wider bars indicate higher execution time, and provides heap snapshot analysis to identify memory leaks and allocation patterns. PerfView can attach to running processes to collect trace data and detach without terminating the target, and it resolves raw addresses in stack traces to function names and source lines using debug symbols.

Additional capabilities include CPU sampling profiling that attributes CPU time to code paths, object allocation tracing to reduce memory pressure, and detailed analysis of garbage collection patterns. The underlying trace event processing engine parses and transforms raw ETW event streams into structured performance data for analysis of both Windows kernel and user-mode events.

## Tags

### Testing & Quality Assurance

- [Performance Profilers](https://awesome-repositories.com/f/testing-quality-assurance/performance-profilers.md) — A profiler that uses ETW to diagnose .NET application performance, CPU usage, and memory issues.
- [Memory Leak Detection](https://awesome-repositories.com/f/testing-quality-assurance/debugging-diagnostics/memory-leak-detection.md) — Identifies memory leaks by analyzing heap snapshots and object graphs in .NET applications.
- [Performance Diagnostics](https://awesome-repositories.com/f/testing-quality-assurance/performance-testing-analysis/performance-diagnostics.md) — Diagnoses performance bottlenecks in .NET applications by tracing CPU, memory, and GC events.
- [Flame Graph Visualizers](https://awesome-repositories.com/f/testing-quality-assurance/performance-testing-analysis/performance-diagnostics/execution-profilers/flame-graph-visualizers.md) — Generates interactive flame graphs from profiling data to visualize call stack execution time.

### Development Tools & Productivity

- [CPU and GC Profilers](https://awesome-repositories.com/f/development-tools-productivity/debugging-profiling-testing/debugging-diagnostics/performance-resource-profilers/cpu-and-gc-profilers.md) — Measures CPU time and garbage collection events in .NET processes for performance analysis.
- [CPU Profilers](https://awesome-repositories.com/f/development-tools-productivity/debugging-profiling-testing/debugging-diagnostics/performance-resource-profilers/cpu-profilers.md) — Samples call stacks at fixed intervals to attribute CPU time to code paths.
- [Execution Path Comparison Tools](https://awesome-repositories.com/f/development-tools-productivity/side-by-side-diff-viewers/execution-path-comparison-tools.md) — Compares two performance traces side-by-side to highlight changes in method costs and event rates.

### Programming Languages & Runtimes

- [Runtime Performance Profiling](https://awesome-repositories.com/f/programming-languages-runtimes/node-js-debuggers/runtime-performance-profiling.md) — Traces object allocations, method calls, and memory snapshots to diagnose runtime performance issues. ([source](https://cdn.jsdelivr.net/gh/microsoft/perfview@main/README.md))

### Software Engineering & Architecture

- [Trace Event Processing Engines](https://awesome-repositories.com/f/software-engineering-architecture/trace-event-processing-engines.md) — Parses and transforms raw ETW event streams into structured performance data for analysis.

### System Administration & Monitoring

- [ETW Event Analyzers](https://awesome-repositories.com/f/system-administration-monitoring/etw-event-analyzers.md) — Analyzes Event Tracing for Windows (ETW) events to understand application behavior and system-level performance.
- [Heap Graph Snapshot Analyzers](https://awesome-repositories.com/f/system-administration-monitoring/heap-memory-monitoring/heap-graph-snapshot-analyzers.md) — Captures and queries managed heap snapshots to identify memory leaks and allocation patterns.
- [ETW-Based Tracers](https://awesome-repositories.com/f/system-administration-monitoring/log-ingestion/etw-based-tracers.md) — Captures and analyzes Windows ETW events for system and .NET performance diagnostics.
- [ETW Event Collectors](https://awesome-repositories.com/f/system-administration-monitoring/log-ingestion/etw-event-collectors.md) — Subscribes to Windows kernel and user-mode events via the Event Tracing for Windows API for performance tracing.
- [Process Attachment Tools](https://awesome-repositories.com/f/system-administration-monitoring/process-attachment-tools.md) — Attaches to running processes to collect trace data and detaches without terminating the target.

### Part of an Awesome List

- [Debug Symbol Resolvers](https://awesome-repositories.com/f/awesome-lists/devtools/unpacking-and-deobfuscation/trace-symbol-resolvers/debug-symbol-resolvers.md) — Resolves raw addresses in stack traces to function names and source lines using debug symbol files.

### Operating Systems & Systems Programming

- [Memory Allocation Tracers](https://awesome-repositories.com/f/operating-systems-systems-programming/kernel-core-internals/process-and-memory-management/memory-management/allocation-strategies/dynamic-memory-allocation/memory-allocation-tracers.md) — Traces object allocations and garbage collection patterns to reduce memory pressure and improve throughput.
