Which performance tool should I use? (C#, Visual Basic, C++, F#)
Applies to: Visual Studio Visual Studio for Mac Visual Studio Code
Visual Studio provides a variety of profiling tools to help you diagnose different kinds of app performance issues depending on your app type. In this article, we provide information to help you find the right tool for your scenario and application type.
Which tool should I use?
The following table lists the different tools Visual Studio offers and provides common scenarios for choosing the tool.
|Performance Tool||Description||When to use the tool?|
|CPU Usage||Shows where the CPU is spending time.||• Begin an investigation for general performance issues.
• Investigate high Server CPU usage.
• Investigate DevOps scenarios, such as when orders are not getting through to the retail website.
• Optimize CPU usage.
• Investigate latency in API calls.
|Flame graph||View within the CPU Usage tool that provides an alternate visualization of the call tree.||Investigate latency in API calls|
|Hot path||View within the CPU Usage tool that shows where most of the CPU time was spent in your application.||Investigate latency in API calls|
|PerfTips||Shows a quick measurement of performance information while interacting with your code.||While debugging, you want to see the elapsed time between the previous step operation (or breakpoint) to the current step or breakpoint.|
|Memory Usage||Shows your app’s memory to find issues such as memory leaks.||• Optimize memory usage
• Investigate UI freeze
• Investigate suspected memory leak (native code)
|.NET Object Allocation||Shows where .NET Objects are allocated and information about garbage collection.||• Optimize .NET memory usage
• Analyze garbage collection
|Events viewer||Shows HTTP requests, log messages, and exceptions.||• Investigate latency in API calls
• Investigate slow application running on a remote web server
|.NET Async||Shows async/await usage in .NET apps.||Investigate suspected performance issue with asynchronous code.|
|.NET Counters||Visualization for .NET counters.||You want a visualization for .NET counter-based metrics such as exceptions per second, garbage collection, and CPU utilization.|
|Instrumentation||Shows exact call counts and call times.||You need a tool like CPU Usage, but you want exact call counts and results based on wall clock time. This tool requires extra overhead.|
|File I/O||Shows your File I/O operations and how long they take and how much data they process.||Investigate UI freeze|
|Database||Shows performance of your database queries.||Investigate performance for database queries that use either ADO.NET or Entity Framework Core.|
|GPU Usage||Shows high-level hardware usage of your Direct3D app.||Check whether the performance of your app is CPU-bound or GPU-bound.|
|Application Timeline||Shows UI performance for XAML apps.||Investigate UI performance in XAML apps, such as time spent rendering frames.|
|IntelliTrace||Debugger tool that lets you record events and examine your application state at various points of execution.||You want a tool to examine application state at various points, not just the current application state.|
Which tools are supported for my project?
The following table lists the different tools Visual Studio offers and the different project types you can use them with:
|Performance Tool||.NET||C/C++||UWP||ASP.NET/ASP.NET Core|
|.NET Object Allocation||yes||no||yes||yes|
|.NET Counters||yes (.NET Core/5+ only)||no||no||yes (ASP.NET Core only)|
|Database||yes (.NET Core/5+ only)||no||no||yes (ASP.NET Core only)|
|Application Timeline||yes (XAML)||no||yes||no|
|IntelliTrace||.NET with Visual Studio Enterprise only||no||.NET with Visual Studio Enterprise only||.NET with Visual Studio Enterprise only|
The following tools are supported with Linux as the target platform as well as Windows:
- CPU Usage
- .NET Object Allocation Tracking
- .NET Async
- .NET Counters
- Events Viewer
Skicka och visa feedback för