Разное

Visual profiler visual studio: Измерение использования ЦП в приложениях — Visual Studio

Содержание

Измерение использования ЦП в приложениях — Visual Studio



  • Чтение занимает 6 мин

В этой статье

Средство диагностики Использование ЦП, интегрированное в отладчик, позволяет находить проблемы с производительностью во время отладки.Find performance issues while you’re debugging with the debugger-integrated CPU Usage diagnostic tool. Анализировать загрузку ЦП также можно без подключения отладчика — нужно просто указать выполняющееся приложение.You can also analyze CPU usage without a debugger attached or by targeting a running app. Дополнительные сведения см. в разделе Запуск средств профилирования с отладчиком или без него. For more information, see Run profiling tools with or without the debugger.

При приостановке отладчика средство Загрузка ЦП в окне «Средства диагностики» собирает сведения о функциях, которые выполняются в приложении.When the debugger pauses, the CPU Usage tool in the Diagnostic Tools window collects information about the functions that are executing in your application. Кроме того, это средство перечисляет функции, которые выполняли максимальный объем работы, а также предоставляет график временной шкалы, который позволяет сосредоточить внимание на определенных сегментах сеанса выборки.The tool lists the functions that were performing work, and provides a timeline graph you can use to focus on specific segments of the sampling session.

Важно!

Средства диагностики, интегрированные в отладчик, поддерживаются для разработки приложений .NET в Visual Studio, включая ASP.NET и ASP.NET Core, и машинного кода или кода C++.The debugger-integrated Diagnostics Tools are supported for . NET development in Visual Studio, including ASP.NET, ASP.NET Core, and for native/C++ development. Для запуска средств профилирования с отладчиком (окно Средства диагностики) требуется Windows 8 и более поздние версии.Windows 8 and later is required to run profiling tools with the debugger (Diagnostic Tools window).

В этом руководстве рассмотрены следующие задачи:In this tutorial, you will:

  • Сбор данных об использовании ЦПCollect CPU usage data
  • Анализ данных о загрузке ЦПAnalyze CPU usage data

Если средство Загрузка ЦП не предоставляет необходимые данные, можно воспользоваться другими средствами профилирования в Профилировщике производительности, предоставляющими другие виды информации, которая может оказаться полезной.If CPU Usage does not give you the data that you need, other profiling tools in the Performance Profiler provide different kinds of information that might be helpful to you. Как правило, проблемы производительности приложения могут вызываться другими компонентами помимо ЦП, такими как память, отрисовка пользовательского интерфейса или время запроса сети.In many cases, the performance bottleneck of your application may be caused by something other than your CPU, such as memory, rendering UI, or network request time.

Шаг 1. Сбор данных профилированияStep 1: Collect profiling data

  1. Откройте проект для отладки в Visual Studio и установите точку останова в приложении в точке, где вы хотите проверить загрузку ЦП.Open the project you want to debug in Visual Studio and set a breakpoint in your app at the point where you want to examine CPU usage.

  2. Установите вторую точку останова в конце функции или области кода, который требуется проанализировать.Set a second breakpoint at the end of the function or region of code that you want to analyze.

    С помощью двух точек останова можно ограничить сбор данных частями кода, которые требуется проанализировать. By setting two breakpoints, you can limit data collection to the parts of code that you want to analyze.

  3. Окно Средства диагностики появится автоматически, если вы не отключали эту функцию.The Diagnostic Tools window appears automatically unless you have turned it off. Чтобы снова открыть окно, щелкните Отладка > Окна > Показать средства диагностики.To bring up the window again, click Debug > Windows > Show Diagnostic Tools.

  4. Вы можете выбрать, что следует просмотреть, Использование памяти или Загрузка ЦП (либо оба средства), с помощью параметра Выбор средств на панели инструментов.You can choose whether to see CPU Usage, Memory Usage, or both, with the Select Tools setting on the toolbar. В Visual Studio Enterprise также можно включить или отключить IntelliTrace, выбрав Сервис > Параметры > IntelliTrace. If you are running Visual Studio Enterprise, you can also enable or disable IntelliTrace in Tools > Options > IntelliTrace.

    Нас главным образом интересует загрузка ЦП, поэтому убедитесь, что средство Загрузка ЦП включено (оно включено по умолчанию).We will mainly be looking at CPU utilization, so make sure that CPU Usage is enabled (it is enabled by default).

  5. Щелкните Отладка > Начать отладку (Запустить на панели инструментов или F5).Click Debug > Start Debugging (or Start on the toolbar, or F5).

    По завершении загрузки приложения отображается представление «Сводка» средств диагностики.When the app finishes loading, the Summary view of the Diagnostics Tools appears. Если вам нужно открыть окно, щелкните Отладка > Окна > Показать средства диагностики. If you need to open the window, click Debug > Windows > Show Diagnostic Tools.

    Дополнительные сведения о событиях см. в разделе Поиск и фильтрация на вкладке «События» окна «Средства диагностики».For more information on the events, see Searching and filtering the Events tab of the Diagnostic Tools window.

  6. Запустите сценарий, который вызвал срабатывание первой точки останова.Run the scenario that will cause your first breakpoint to be hit.

  7. Приостановив отладчик, включите сбор данных о загрузке ЦП, а затем откройте вкладку Загрузка ЦП.While the debugger is paused, enable the collection of the CPU Usage data and then open the CPU Usage tab.

    При выборе пункта Запись профиля ЦП Visual Studio начнет записывать функции и сведения о времени их выполнения.When you choose Record CPU Profile, Visual Studio will begin recording your functions and how much time they take to execute. Эти собранные данные можно просматривать только в том случае, если приложение останавливается в точке останова.You can only view this collected data when your application is halted at a breakpoint.

  8. Нажмите клавишу F5, чтобы запустить приложение до второй точки останова.Hit F5 to run the app to your second breakpoint.

    Теперь у вас есть данные о производительности приложения именно для той области кода, которая выполняется между двумя точками останова.Now, you now have performance data for your application specifically for the region of code that runs between the two breakpoints.

    Профилировщик начинает подготавливать данные потока.The profiler begins preparing thread data. Дождитесь завершения этой операции.Wait for it to finish.

    Средство «Загрузка ЦП» выведет отчет на вкладке Загрузка ЦП.The CPU Usage tool displays the report in the CPU Usage tab.

  9. Если вы хотите выбрать для анализа более конкретную область кода, выберите область на временной шкале ЦП (это должна быть область, в которой отображаются данные профилирования). If you want to select a more specific region of code to analyze, select a region in the CPU timeline (it must be a region that shows profiling data).

    На этом этапе можно начать анализировать данные.At this point, you can begin to analyze the data.

    Совет

    При определении проблем с производительностью рекомендуется сделать несколько измерений.When trying to identify performance issues, take multiple measurements. Вполне естественно, что производительность варьируется от запуска к запуску, а первое выполнение путей кода обычно происходит медленнее, так как необходимо разово провести такие действия по инициализации, как загрузка библиотек DLL, JIT-компиляция методов и инициализация кэшей.Performance naturally varies from run-to-run, and code paths typically execute slower the first time they run due to one-time initialization work such as loading DLLs, JIT compiling methods, and initializing caches. Сделав несколько измерений, вы сможете лучше понять диапазон и медиану отображаемой метрики и сравнить показатель первого выполнения со стабильной производительностью области кода. By taking multiple measurements, you get a better idea of the range and median of the metric being shown, whichs allow you to compare the first time versus the steady state performance of an area of code.

Шаг 2. Анализ данных о загрузке ЦПStep 2: Analyze CPU usage data

Мы рекомендуем начать анализ данных с проверки списка функций на вкладке «Загрузка ЦП» и выявления функций, выполняющих основную часть работы, а затем подробно рассмотреть каждую из этих функций.We recommend that you begin analyzing your data by examining the list of functions under CPU Usage, identifying the functions that are doing the most work, and then taking a closer look at each one.

  1. В списке функций изучите функции, которые выполняют большую часть работы.In the function list, examine the functions that are doing the most work.

    Совет

    Функции перечисляются, начиная с тех, которые выполняют большую часть работы (а не в порядке вызова).Functions are listed in order starting with those doing the most work (they’re not in call order). Это позволяет быстро находить функции, которые выполнялись дольше всего.This helps you quickly identify the longest running functions.

  2. В списке функций дважды щелкните одну из функций вашего приложения, которая выполняет много работы.In the function list, double-click one of your app functions that is doing a lot of work.

    При двойном щелчке функции в левой панели откроется представление Вызывающий/вызываемый.When you double-click a function, the Caller/Callee view opens in the left pane.

    В этом представлении выбранная функции отображается в заголовке и в поле Текущая функция (в этом примере GetNumber).In this view, the selected function shows up in the heading and in the Current Function box (GetNumber, in this example). Функция, вызывавшая текущую функцию, отображается в левой части окна в разделе Вызывающие функции, а все функции, вызываемые текущей функцией, отображаются в поле Вызываемые функции справа. The function that called the current function is shown on the left under Calling Functions, and any functions called by the current function are shown in Called Functions box on the right. (Можно выбрать любое поле, чтобы изменить текущую функцию.)(You can select either box to change the current function.)

    В этом представлении показано общее время (мс) и доля общего времени выполнения приложения, затраченного на выполнение функции.This view shows you the total time (ms) and the percentage of the overall app running time that the function has taken to complete.
    В поле Тело функции также показан общий объем времени (и доля времени), затраченного в теле функции за исключением времени, затраченного в вызываемых и вызывающих функциях.Function Body also shows you the total amount of time (and the percentage of time) spent in the function body excluding time spent in calling and called functions. (В этом примере в теле функции затрачено 2367 из 2389 мс, а оставшиеся 22 мс затрачены во внешнем коде, вызванном этой функцией). (In this example, 2367 out of 2389 ms were spent in the function body, and the remaining 22 ms were spent in external code called by this function).

    Совет

    Высокие значения в поле Тело функции могут свидетельствовать о проблемах производительности внутри самой функции.High values in Function Body may indicate a performance bottleneck within the function itself.

  3. Чтобы увидеть более обобщенное представление, показывающее порядок, в котором вызываются функции, выберите в раскрывающемся списке в верхней части панели пункт Дерево вызовов.To see a higher-level view showing the order in which the functions are called, select Call Tree from the drop-down list at the top of the pane.

    Каждая нумерованная область на рисунке соответствует определенному шагу в процедуре.Each numbered area in the figure relates to a step in the procedure.

    ИзображениеImageОписаниеDescription
    Узел верхнего уровня в деревьях вызовов для использования ЦП представляет собой псевдоузелThe top-level node in CPU Usage call trees is a pseudo-node
    В большинстве приложений при отключенном параметре Показать внешний код узлом второго уровня является узел [Внешний код] , который содержит код системы и инфраструктуры, запускающий и останавливающий приложение, отрисовывающий пользовательский интерфейс, управляющий планированием потоков и предоставляющий приложению другие низкоуровневые службы. In most apps, when the Show External Code option is disabled, the second-level node is an [External Code] node that contains the system and framework code that starts and stops the app, draws the UI, controls thread scheduling, and provides other low-level services to the app.
    Дочерними элементами узла второго уровня являются методы пользовательского кода и асинхронные подпрограммы, которые вызываются или создаются кодом системы и инфраструктуры на втором уровне.The children of the second-level node are the user-code methods and asynchronous routines that are called or created by the second-level system and framework code.
    Дочерние узлы метода содержат данные только для вызова родительского метода.Child nodes of a method contain data only for the calls of the parent method. Если параметр Показать внешний код отключен, методы приложения также могут содержать узел [Внешний код] .When Show External Code is disabled, app methods can also contain an [External Code] node.

    Ниже приведены дополнительные сведения по значениям столбца.Here is more information on the column values:

    • Значение Общее время ЦП указывает, какой объем работы был выполнен некоторой функцией и всеми вызванными ей функциями.Total CPU indicates how much work was done by the function and any functions called by it. Высокие значения общего времени ЦП указывают на функции, которые в целом являются наиболее ресурсоемкими.High total CPU values point to the functions that are most expensive overall.

    • Значение Собственное время указывает, какой объем работы был выполнен кодом в теле функции, за исключением работы, выполненной вызванными ей функциями.Self CPU indicates how much work was done by the code in the function body, excluding the work done by functions that were called by it. Высокие значения собственного времени ЦП могут свидетельствовать о проблемах производительности внутри самой функции. High Self CPU values may indicate a performance bottleneck within the function itself.

    • Модули. Имя модуля, содержащего функцию, или количество модулей, содержащих функции в узле [Внешний код].Modules The name of the module containing the function, or the number of modules containing the functions in an [External Code] node.

    Чтобы увидеть вызовы функций, которые используют самый высокий процент ЦП в представлении дерева вызовов, нажмите Развернуть критический путь.To see the function calls that use the highest percentage of the CPU in the call tree view, click Expand Hot Path.

    Примечание

    Если код отображается в дереве вызовов с пометкой «broken» (неработающий) или «unwalkable stack» (нетрассируемый стек), это указывает, что трассировка событий Windows, скорее всего, прервана.If you see code in the call tree marked as «broken» code or «unwalkable stack», this indicates that Event Tracing for Windows (ETW) events were likely dropped. Для устранения проблемы попробуйте повторно выполнить ту же трассировку.Try collecting the same trace a second time to resolve the issue.

Просмотр внешнего кодаView external code

Внешний код — это функции в компонентах системы и платформы, которые исполняются вашим кодом.External code are functions in system and framework components that are executed by the code you write. Внешний код включает функции, которые запускают и останавливают приложение, отрисовывают пользовательский интерфейс, управляют потоками и предоставляют приложению другие низкоуровневые службы.External code include functions that start and stop the app, draw the UI, control threading, and provide other low-level services to the app. В большинстве случаев внешний код вас интересовать не будет, поэтому средство «Загрузка ЦП» собирает внешние функции пользовательского метода в один узел [Внешний код] .In most cases, you won’t be interested in external code, and so the CPU Usage tool gathers the external functions of a user method into one [External Code] node.

Если вы захотите посмотреть пути к вызовам внешнего кода, выберите Показать внешний код в списке Представление фильтра и выберите Применить.If you want to view the call paths of external code, choose Show External Code from the Filter view list and then choose Apply.

Помните о том, что многие цепочки вызовов имеют глубокий уровень вложенности, поэтому ширина столбца «Имя функции» может превышать ширину многих мониторов.Be aware that many external code call chains are deeply nested, so that the width of the Function Name column can exceed the display width of all but the largest of computer monitors. В этом случае имена функций отображаются в виде […] .When this happens, function names are shown as […].

Используйте поле поиска, чтобы найти требуемый узел, а затем воспользуйтесь горизонтальной полосой прокрутки для отображения данных в представлении. Use the search box to find a node that you are looking for, then use the horizontal scroll bar to bring the data into view.

Совет

Если вы выполняете профилирование внешнего кода, вызывающего функции Windows, следует убедиться, что используются самые новые версии PDB-файлов.If you profile external code that calls Windows functions, you should make sure that you have the most current .pdb files. Без этих файлов имена функций Windows в представлениях отчетов будут отображаться в непонятном или трудном для понимания виде.Without these files, your report views will list Windows function names that are cryptic and difficult to understand. Дополнительные сведения о том, как убедиться в наличии нужных файлов, см. в статье Указание файлов символов (.pdb) и файлов с исходным кодом в отладчике Visual Studio.For more information about how to make sure that you have the files you need, see Specify symbol (.pdb) and source files in the debugger.

Следующие шагиNext steps

В этом руководстве вы узнали, как собирать и анализировать данные об использовании ЦП. In this tutorial, you’ve learned how to collect and analyze CPU usage data. Если вы уже ознакомились с общими сведениями о средствах профилирования, можно перейти к анализу данных об использовании памяти в приложениях.If you already completed the First look at profiling tools, you may want to get a quick look at how to analyze memory usage in your apps.



Анализ загрузки ЦП в Профилировщике производительности — Visual Studio



  • Чтение занимает 4 мин

В этой статье

Хороший способ начать исследование проблем производительности в приложении — определить загрузку ЦП.A good way to start investigating performance issues in your app is to understand its CPU usage. Средство оценки производительности Загрузка ЦП показывает время и процент ресурсов ЦП, затраченные на выполнение кода в приложениях C++, C#/Visual Basic и JavaScript.The CPU Usage performance tool shows the CPU time and percentage spent executing code in C++, C#/Visual Basic, and JavaScript apps.

Средство Загрузка ЦП может выполняться для открытого проекта Visual Studio, для установленного приложения Microsoft Store либо подключаться к запущенному приложению или процессу.The CPU Usage tool can run on an open Visual Studio project, on an installed Microsoft Store app, or attached to a running app or process. Средство Загрузка ЦП можно запустить с отладкой или без нее.You can run the CPU Usage tool with or without debugging. Дополнительные сведения см. в разделе Запуск средств профилирования с отладчиком или без него.For more information, see Run profiling tools with or without the debugger.

Ниже показано, как использовать средство Загрузка ЦП без отладчика, используя Профилировщик производительности Visual Studio. The following instructions show how to use the CPU Usage tool without the debugger, using the Visual Studio Performance Profiler. В примерах используется сборка выпуска на локальном компьютере.The examples use a Release build on a local machine. Сборки выпуска дают наилучшее представление о фактической производительности приложения.Release builds provide the best view of actual app performance. Сведения об анализе загрузки ЦП с использованием сборок отладки (с подключенным отладчиком) см. в разделе Руководство по профилированию производительности для начинающих.To analyze CPU usage with Debug builds (debugger attached), see Beginner’s guide to performance profiling.

Обычно выполнение установленного приложения лучше всего отражается на локальном компьютере.Usually, the local machine best replicates installed app execution. Чтобы собрать данные с удаленного устройства, запустите приложение непосредственно на устройстве, не используя подключение к удаленному рабочему столу.To collect data from a remote device, run the app directly on the device, not over a Remote Desktop Connection.

Сбор данных об использовании ЦПCollect CPU usage data

  1. В проекте Visual Studio установите для решения конфигурацию Выпуск и выберите цель развертывания Локальный отладчик Windows (или Локальный компьютер).In the Visual Studio project, set the solution configuration to Release and select Local Windows Debugger (or Local Machine) as the deployment target.

  2. Выберите Отладка > Профилировщик производительности.Select Debug > Performance Profiler.

  3. В разделе Доступные инструменты выберите Загрузка ЦП и затем Запустить.Under Available tools, select CPU Usage, and then select Start.

  4. После запуска приложения начинается диагностический сеанс, который отображает данные о загрузке ЦП. After the app starts, the diagnostic session begins and displays CPU usage data. Когда вы закончите сбор данных, выберите Остановить сбор данных.When you’re finished collecting data, select Stop Collection.

    Инструмент «Использование ЦП» анализирует данные и отображает отчет.The CPU Usage tool analyzes the data and displays the report.

Анализ отчета об использовании ЦПAnalyze the CPU Usage report

Диагностический отчет отсортирован по параметру Общая активность ЦП в порядке убывания.The diagnostic report is sorted by Total CPU, from highest to lowest. Измените порядок сортировки или столбец сортировки, выбирая заголовки столбцов.Change the sort order or sort column by selecting the column headers. Используйте раскрывающийся список Фильтр, чтобы выбрать или отменить выбор отображаемых потоков, и поле Поиск, чтобы найти определенный поток или узел. Use the Filter dropdown to select or deselect threads to display, and use the Search box to search for a specific thread or node.

Начиная с Visual Studio 2019, вы можете нажимать кнопки Развернуть критический путь и Показать критический путь, чтобы увидеть вызовы функций, которые используют самый высокий процент ЦП в представлении дерева вызовов.Starting in Visual Studio 2019, you can click the Expand Hot Path and Show Hot Path buttons to see the function calls that use the highest percentage of the CPU in the call tree view.

Столбцы данных о загрузке ЦПCPU Usage data columns

nameNameОписаниеDescription
Общая активность ЦП [единица измерения, %]Total CPU [unit, %]

Миллисекунды и процент ресурсов ЦП, потраченные на вызовы функции и функций, которые вызывала данная функция, в выбранный период времени. The milliseconds and CPU percentage used by calls to the function, and functions called by the function, in the selected time range. Это отличается от графика временной шкалы Использование ЦП, который сравнивает общую активность ЦП за период времени с общими доступными ресурсами ЦП.This is different from the CPU Utilization timeline graph, which compares the total CPU activity in a time range to the total available CPU.

Собственная активность ЦП [единица измерения, %]Self CPU [unit, %]

Миллисекунды и процент ресурсов ЦП, потраченные на вызовы функции в выбранный период времени, за исключением функций, которые вызывала данная функция.The milliseconds and CPU percentage used by calls to the function in the selected time range, excluding functions called by the function.

МодульModuleИмя модуля, содержащего функцию.The name of the module containing the function.

Дерево вызовов средства «Использование ЦП»The CPU Usage call tree

Чтобы просмотреть дерево вызовов, выберите родительский узел в отчете.To view the call tree, select the parent node in the report. Открывается страница Загрузка CPU с представлением Вызывающий/вызываемый.The CPU Usage page opens to the Caller/Callee view. В раскрывающемся списке Текущее представление выберите Дерево вызовов.In the Current View dropdown, select Call Tree.

Структура дерева вызововCall tree structure

ИзображениеImageОписаниеDescription
Узел верхнего уровня в деревьях вызовов для использования ЦП представляет собой псевдоузел.The top-level node in CPU Usage call trees is a pseudo-node.
В большинстве приложений при отключенном параметре Показать внешний код узлом второго уровня является узел [Внешний код] . In most apps, when the Show External Code option is disabled, the second-level node is an [External Code] node. Он содержит код системы и инфраструктуры, запускающий и останавливающий приложение, отрисовывающий пользовательский интерфейс, управляющий планированием потоков и предоставляющий приложению другие низкоуровневые службы.The node contains the system and framework code that starts and stops the app, draws the UI, controls thread scheduling, and provides other low-level services to the app.
Дочерними элементами узла второго уровня являются методы пользовательского кода и асинхронные подпрограммы, которые вызываются или создаются кодом системы и инфраструктуры на втором уровне.The children of the second-level node are the user-code methods and asynchronous routines that are called or created by the second-level system and framework code.
Дочерние узлы метода содержат данные только для вызова родительского метода. Child nodes of a method have data only for the calls of the parent method. Если параметр Показать внешний код отключен, методы приложения также могут содержать узел [Внешний код] .When Show External Code is disabled, app methods can also contain an [External Code] node.
Внешний кодExternal code

Функции системы и платформы, исполняемые вашим кодом, называются внешним кодом.System and framework functions that are executed by your code are called external code. Функции внешнего кода запускают и останавливают приложение, отрисовывают пользовательский интерфейс, управляют потоками и предоставляют приложению другие низкоуровневые службы.External code functions start and stop the app, draw the UI, control threading, and provide other low-level services to the app. В большинстве случаев внешний код вас интересовать не будет, поэтому дерево вызовов средства «Использование ЦП» собирает внешние функции пользовательского метода в один узел [Внешний код] . In most cases, you aren’t interested in external code, so the CPU Usage call tree gathers the external functions of a user method into one [External Code] node.

Чтобы посмотреть пути вызовов внешнего кода, на главной странице диагностического отчета (область справа) выберите Показать внешний код в раскрывающемся списке Фильтр и выберите Применить.To view the call paths of external code, on the main diagnostic report page (right pane), select Show External Code from the Filter dropdown, and then select Apply. Представление Дерево вызовов на странице Загрузка ЦП развертывает вызовы внешнего кода.The Call Tree view of the CPU Usage page then expands the external code calls. (Раскрывающийся список Фильтр можно найти на главной странице диагностики, а не в представлениях с подробными сведениями. )(The Filter dropdown is available on the main diagnostic page, not the detailed views.)

Многие цепочки вызовов имеют глубокий уровень вложенности, поэтому ширина цепочки может превышать отображаемую ширину столбца Имя функции.Many external code call chains are deeply nested, so the width of the chain can exceed the display width of the Function Name column. Тогда имена функций отображаются в виде .The function names then appear as .

Чтобы найти имя нужной функции, используйте поле поиска.To find a function name you’re looking for, use the search box. Наведите указатель мыши на выбранную строку или используйте горизонтальную полосу прокрутки для просмотра данных.Hover over the selected line or use the horizontal scroll bar to view the data.

Асинхронные функции в дереве вызовов средства «Использование ЦП»Asynchronous functions in the CPU usage call tree

Если компилятор обнаруживает асинхронный метод, он создает скрытый класс для контроля выполнения этого метода. When the compiler encounters an asynchronous method, it creates a hidden class to control the method’s execution. По сути, этот класс представляет собой конечный автомат.Conceptually, the class is a state machine. Класс содержит созданные компилятором функции, которые асинхронно вызывают исходные методы, а также обратные вызовы, планировщик и итераторы, необходимые для их выполнения.The class has compiler-generated functions that asynchronously call the original methods, and the callbacks, scheduler, and iterators needed to run them. При вызове исходного метода родительским методом компилятор удаляет метод из контекста выполнения родительского метода и выполняет методы скрытого класса в контексте кода системы и платформы, который управляет выполнением приложения.When a parent method calls the original method, the compiler removes the method from the execution context of the parent, and runs the hidden class methods in the context of the system and framework code that controls app execution. Асинхронные методы часто, но не всегда выполняются в отдельном потоке (или в нескольких потоках).The asynchronous methods are often, but not always, executed on one or more different threads. Этот код отображается в дереве вызовов средства Загрузка ЦП в виде дочерних элементов узла [Внешний код] сразу под верхним узлом дерева.This code appears in the CPU Usage call tree as children of the [External Code] node immediately below the top node of the tree.

В следующем примере два первых узла в узле [Внешний код] представляют собой созданные компилятором методы класса конечного автомата.In the following example, the first two nodes under [External Code] are the compiler-generated methods of the state machine class. Третий узел является вызовом исходного метода.The third node is the call to the original method.

Разверните созданные методы, чтобы узнать, как это работает:Expand the generated methods to show what’s going on:

  • MainPage::GetMaxNumberAsyncButton_Click просто управляет списком значений задач, вычисляет максимальное значение на основе результатов и отображает выходные данные. MainPage::GetMaxNumberAsyncButton_Click just manages a list of the task values, computes the maximum of the results, and displays the output.

  • MainPage+<GetMaxNumberAsyncButton_Click>d__3::MoveNext показывает время ЦП, затраченное на планирование и запуск 48 задач, которые являются оболочкой вызова GetNumberAsync.MainPage+<GetMaxNumberAsyncButton_Click>d__3::MoveNext shows you the activity required to schedule and launch the 48 tasks that wrap the call to GetNumberAsync.

  • MainPage::<GetNumberAsync>b__b показывает время ЦП, затраченное на выполнение задач, которые вызывают GetNumber.MainPage::<GetNumberAsync>b__b shows the activity of the tasks that call GetNumber.

Анализ использования памяти в Профилировщике производительности — Visual Studio



  • Чтение занимает 10 мин

В этой статье

Средство Использование памяти отслеживает использование памяти в приложении.The Memory Usage tool monitors your app’s memory use. Вы можете использовать его для изучения воздействия сценариев, разрабатываемых в Visual Studio, на память в режиме реального времени.You can use the tool to study the real-time memory effects of scenarios you’re actively developing in Visual Studio. Можно создавать подробные моментальные снимки состояния памяти приложения и сравнивать их для выявления первопричин проблем с памятью.You can take detailed snapshots of the app’s memory states, and compare snapshots to find the root causes of memory issues. Средство использования памяти поддерживается в приложениях .NET, ASP.NET, C++ и смешанных приложениях (на основе .NET и машинного кода). The Memory Usage tool is supported on .NET, ASP.NET, C++, or mixed mode (.NET and native) apps.

Средство Использование памяти можно запускать с отладчиком или без него.The Memory Usage tool can run with or without the debugger. Из этой статьи вы узнаете, как в Профилировщике производительности Visual Studio использовать средство «Использование памяти» без отладчика (рекомендуется для сборок выпусков).In this article, we show how to use the Memory Usage tool without the debugger in the Visual Studio Performance Profiler, which is recommended for release builds.

Диагностические сеансы по использованию памятиMemory Usage diagnostic sessions

Запуск диагностического сеанса по использованию памяти:To start a Memory Usage diagnostic session:

  1. Откройте проект в Visual Studio.Open a project in Visual Studio.

    Средство использования памяти поддерживает приложения .NET, ASP.NET, C++ и смешанные приложениях (на основе . NET и машинного кода).The Memory Usage tool supports .NET, ASP.NET, C++, or mixed mode (.NET and native) apps.

  2. В меню «Отладка» установите для решения конфигурацию Выпуск и выберите цель развертывания Локальный отладчик Windows (или Локальный компьютер).In the Debug menu, set the solution configuration to Release and select Local Windows Debugger (or Local Machine) as the deployment target.

  3. В строке меню выберите Отладка > Профилировщик производительности.On the menu bar, choose Debug > Performance Profiler.

  4. В разделе Доступные инструменты выберите Использование памяти и затем щелкните Запустить.Under Available Tools, select Memory Usage, and then select Start.

Контроль использования памятиMonitor memory use

При запуске диагностического сеанса запускается ваше приложение, а в окне Средства диагностики отображается график использования памяти приложением. When you start a diagnostic session, your app starts, and the Diagnostic Tools window displays a timeline graph of your app’s memory use.

График временной шкалы показывает колебания объема памяти по мере выполнения приложения.The timeline graph shows memory fluctuations as the app runs. Пики на графике обычно указывают на то, что некоторый код собирает или создает данные, а после обработки удаляет их.Spikes in the graph usually indicate that some code is collecting or creating data, and then discarding it when the processing is done. Крупные пики обозначают области, которые вы, вероятно, сможете оптимизировать.Large spikes indicate areas that you might be able to optimize. Особое внимание следует уделять использованию памяти без ее возвращения, так как это может указывать на неэффективное использование памяти и даже ее утечку.Of more concern is a rise in memory consumption that’s not returned, because it may indicate inefficient memory use or even a memory leak.

Создание моментальных снимков с состояний памяти приложенияTake snapshots of app memory states

Приложение использует большое количество объектов, поэтому вам может потребоваться сосредоточить анализ на одном сценарии.An app uses a large number of objects, and you might want to concentrate your analysis on one scenario. Либо вы можете найти проблемы с памятью для дальнейшего изучения.Or, you may find memory issues to investigate. Вы можете создать моментальные снимки во время диагностического сеанса, чтобы зафиксировать использование памяти в определенный момент времени.You can take snapshots during a diagnostic session to capture memory usage at particular moments. Рекомендуется получить базовый снимок приложения до возникновения проблем с памятью, другой снимок — при первом возникновении проблемы, а также дополнительные снимки, если вы в состоянии повторить этот сценарий.It’s a good idea to get a baseline snapshot of an app before a memory issue appears, another snapshot after the first occurrence of the problem, and additional snapshots if you can repeat the scenario.

Чтобы сделать моментальные снимки, когда вы захотите зафиксировать данные о памяти, выберите Сделать снимок.To collect snapshots, select Take snapshot when you want to capture the memory data.

Закрытие диагностического сеансаClose the diagnostic session

Чтобы остановить сеанс мониторинга без создания отчета, просто закройте окно диагностики.To stop a monitoring session without creating a report, just close the diagnostic window. Чтобы создать отчет после сбора данных или создания моментальных снимков, выберите Остановить сбор данных.To generate a report when you’re done collecting or have taken snapshots, select Stop Collection.

Отчеты об использовании памятиMemory Usage reports

После остановки сбора данных инструмент Использование памяти останавливает приложение и отображает обзорную страницу Использование памяти.After you stop data collection, the Memory Usage tool stops the app and displays the Memory Usage overview page.

Моментальные снимки использования памятиMemory Usage snapshots

Числа на панелях Моментальный снимок показывают байты и объекты в памяти при создании каждого моментального снимка, а также разницу между данным и предыдущим снимками.The numbers in the Snapshot panes show the bytes and objects in memory when each snapshot was taken, and the difference between the snapshot and the previous one.

Эти числа являются ссылками, открывающими подробные представления отчетов Использование памяти в новых окнах Visual Studio.The numbers are links that open detailed Memory Usage report views in new Visual Studio windows. Подробный отчет о снимках отображает типы и экземпляры в одном моментальном снимке.A snapshot details report shows the types and instances in one snapshot. Разностный отчет по снимкам (diff) показывает сравнение типов и экземпляров на двух моментальных снимках.A snapshot difference (diff) report compares the types and instances in two snapshots.

ИзображениеImageОписаниеDescription
Общее число байт в памяти на момент получения снимка.The total number of bytes in memory when the snapshot was taken.

Выберите эту ссылку, чтобы отобразить подробный отчет о снимках с сортировкой по общему размеру экземпляров типов.Select this link to display a snapshot details report sorted by the total size of the type instances.

Общее число объектов в памяти на момент получения снимка.The total number of objects in memory when the snapshot was taken.

Выберите эту ссылку, чтобы отобразить подробный отчет о снимках с сортировкой по числу экземпляров типов.Select this link to display a snapshot details report sorted by the count of instances of the types.

Разница между общим размером объектов в памяти для данного и предыдущего снимков.The difference between the total size of memory objects in this snapshot and the previous snapshot.

Положительное число означает, что размер памяти этого снимка больше размера памяти предыдущего снимка, если же первый размер меньше второго, отображается отрицательное число.A positive number means the memory size of this snapshot is larger than the previous one, and a negative number means the size is smaller. Базовый означает, что моментальный снимок является первым в диагностическом сеансе.Baseline means a snapshot is the first in a diagnostic session. Нет различий означает, что разница равна нулю.No Difference means the difference is zero.

Выберите эту ссылку, чтобы отобразить разностный отчет о снимках с сортировкой по разности общих размеров экземпляров типов.Select this link to display a snapshot diff report sorted by the difference in the total size of instances of the types.

Разница между общим числом объектов в памяти для данного и предыдущего снимков.The difference between the total number of memory objects in this snapshot and the previous snapshot.

Выберите эту ссылку, чтобы отобразить разностный отчет о снимках с сортировкой по разности общих количеств экземпляров типов.Select this link to display a snapshot diff report sorted by the difference in the total count of instances of the types.

Отчеты о снимках «Использование памяти»Memory Usage snapshot reports

Если выбрать одну из ссылок моментального снимка на обзорной странице Использование памяти, на новой странице открывается отчет о снимках.When you select one of the snapshot links in the Memory Usage overview page, a snapshot report opens in a new page.

В отчете о снимках можно развернуть записи Тип объекта, чтобы отобразить дочерние записи.In a snapshot report, you can expand Object Type entries to display child entries. В качестве имен экземпляров используются уникальные идентификаторы, создаваемые инструментом «Использование памяти».Instance names are unique IDs that are generated by the Memory Usage tool.

Если текст Тип объекта выделен голубым цветом, его можно выбрать для перехода к соответствующему объекту в исходном коде в отдельном окне.If an Object Type is blue, you can select it to navigate to the object in the source code, in a separate window.

Если вы не можете идентифицировать какие-либо типы или не понимаете, для чего они используются в коде, вероятно, что они относятся к объектам .NET, операционной системы или компилятора.Types that you can’t identify or whose involvement in your code you don’t understand are probably .NET, operating system, or compiler objects. Средство Использование памяти отображает эти объекты, если они входят в состав цепочек владения ваших объектов.The Memory Usage tool displays these objects if they’re involved in the ownership chains of your objects.

В отчете о снимках:In the snapshot report:

  • Дерево Управляемая куча показывает типы и экземпляры в отчете. The Managed Heap tree shows the types and instances in the report. При выборе типа или экземпляра отображаются деревья Пути к корню и Объекты, на которые указывает ссылка для выбранного элемента.Selecting a type or instance displays the Paths to Root and Referenced Objects trees for the selected item.

  • Дерево Пути к корню показывает цепочку объектов, ссылающихся на тип или экземпляр.The Paths to Root tree shows the chain of objects that reference a type or instance. Сборщик мусора .NET очищает память для объекта только после освобождения всех ссылок на него.The .NET garbage collector cleans up the memory for an object only when all references to it have been released.

  • Дерево Типы, на которые указывает ссылка или Объекты, на которые указывает ссылка показывает объекты, на которые ссылается выбранный тип или экземпляр. The Referenced Types or Referenced Objects tree shows the objects that the selected type or instance references.

Фильтры деревьев отчетовReport tree filters

Многие типы в приложениях мало интересуют разработчиков приложений.Many types in apps aren’t very interesting to app developers. Фильтры отчетов о снимках позволяют скрыть большинство таких типов в деревьях Управляемая куча и Пути к корню.The snapshot report filters can hide most of these types in the Managed Heap and Paths to Root trees.

  • Чтобы отфильтровать дерево по имени типа, введите имя в поле Фильтр.To filter a tree by type name, enter the name in the Filter box. Этот фильтр не учитывает регистр и распознает введенную строку в любой части имени типа.The filter isn’t case-sensitive, and it recognizes the specified string in any part of the type name.

  • Выберите Свернуть маленькие объекты в раскрывающемся списке Фильтр, чтобы скрыть все типы, у которых Размер (байт) меньше 0,5 процента от общего объема памяти.Select Collapse Small Objects in the Filter dropdown to hide types whose Size (Bytes) is less than 0.5 percent of the total memory.

  • Выберите Только мой код в раскрывающемся списке Фильтр, чтобы скрыть большинство экземпляров, созданных внешним кодом.Select Just My Code in the Filter dropdown to hide most instances that are generated by external code. Внешние типы принадлежат операционной системе или компонентам платформы либо создаются компилятором.External types belong to the operating system or framework components, or are generated by the compiler.

Подробные отчеты о снимкахSnapshot details reports

Подробный отчет о снимках описывает один снимок из диагностического сеанса. A snapshot details report describes one snapshot from a diagnostic session. Чтобы открыть отчет, выберите ссылку размера или объектов в области моментального снимка.To open the report, select the size or objects link in a snapshot pane.

Обе ссылки открывают один и тот же отчет.Both links open the same report. Единственное различие заключается в начальном порядке сортировки дерева Управляемая куча.The only difference is the starting sort order of the Managed Heap tree. Ссылка размера сортирует отчет по столбцу Инклюзивный размер (байт) .The size link sorts the report by the Inclusive Size (Bytes) column. Ссылка объектов сортирует отчет по столбцу Количество.The objects link sorts the report by the Count column. Вы можете изменить порядок или столбец сортировки после открытия отчета.You can change the sort column or order after the report opens.

Дерево «Управляемая куча» (подробные отчеты о снимках)Managed Heap tree (Snapshot details reports)

Дерево Управляемая куча перечисляет типы объектов, которые хранятся в памяти. The Managed Heap tree lists the types of objects that are held in memory. Вы можете развернуть имя типа, чтобы просмотреть десять самых крупных экземпляров этого типа, отсортированных по размеру.Expand a type name to view the ten largest instances of the type, sorted by size. При выборе типа или экземпляра отображаются деревья Пути к корню и Объекты, на которые указывает ссылка для выбранного элемента.Select a type or instance to display the Paths to Root and Referenced Objects trees for the selected item.

Дерево Управляемая куча в подробном отчете о снимках содержит следующие столбцы:The Managed Heap tree in a snapshot details report has the following columns:

nameNameОписаниеDescription
Тип объектаObject TypeИмя типа или экземпляра объекта.The name of the type or object instance.
КоличествоCountЧисло экземпляров объекта типа.The number of object instances of the type. Для экземпляра Количество всегда равно 1.Count is always 1 for an instance.
Размер (байт)Size (Bytes)Для типа — это размер всех экземпляров типа в снимке без учета размера объектов, содержащихся в этих экземплярах.For a type, the size of all instances of the type in the snapshot, less the size of objects contained in the instances.

Для экземпляра — это размер объекта без учета размера объектов, содержащихся в экземпляре.For an instance, the size of the object, less the size of objects contained in the instance.

Инклюзивный размер (байт)Inclusive Size (Bytes)Размер экземпляров типа или размер отдельного экземпляра, включая размер содержащихся внутри объектов.The size of the instances of the type, or the size of a single instance, including the size of contained objects.
МодульModuleМодуль, содержащий объект.The module that contains the object.

Дерево «Пути к корню» (подробные отчеты о снимках)Paths to Root tree (Snapshot details reports)

Дерево Пути к корню показывает цепочку объектов, ссылающихся на тип или экземпляр.The Paths to Root tree shows the chain of objects that reference a type or instance. Сборщик мусора .NET очищает память для объекта только после освобождения всех ссылок на него.The .NET garbage collector cleans up the memory for an object only when all references to it have been released.

Для типа в дереве Пути к корню число объектов, которые содержат ссылки на этот тип, отображается в столбце Количество ссылок.For a type in the Paths to Root tree, the number of objects that hold references to that type appears in the Reference Count column.

Дерево «Типы, на которые указывает ссылка» или «Объекты, на которые указывает ссылка» (подробные отчеты о снимках)Referenced Types or Referenced Objects tree (Snapshot details reports)

Дерево Типы, на которые указывает ссылка или Объекты, на которые указывает ссылка показывает объекты, на которые ссылается выбранный тип или экземпляр.The Referenced Types or Referenced Objects tree shows the objects that the selected type or instance references.

Дерево Типы, на которые указывает ссылка в подробном отчете о снимках содержит следующие столбцы:A Referenced Types tree in a snapshot details report has the following columns. Дерево Объекты, на которые указывает ссылка не содержит столбец Количество ссылок.A Referenced Objects tree does not have the Reference Count column.

nameNameОписаниеDescription
Тип объекта или ЭкземплярObject Type or InstanceИмя типа или экземпляра. The name of the type or instance.
Количество ссылокReference CountДля типов это число экземпляров объекта типа.For types, the number of object instances of the type.
Размер (байт)Size (Bytes)Для типа — это размер всех экземпляров типа без учета размера объектов, содержащихся в этом типе.For a type, the size of all instances of the type, less the size of objects contained in the type.

Для экземпляра — это размер объекта без учета размера объектов, содержащихся в объекте.For an instance, the size of the object, less the size of objects contained in the object.

Инклюзивный размер (байт)Inclusive Size (Bytes)Размер экземпляров типа или размер экземпляра, включая размер содержащихся внутри объектов.The total size of the instances of the type, or the size of the instance, including the size of contained objects.
МодульModuleМодуль, содержащий объект.The module that contains the object.

Разностные отчеты по снимкам (diff)Snapshot difference (diff) reports

Разностный отчет по снимкам (diff) показывает изменения между основным и предыдущим снимками.A snapshot difference (diff) report shows the changes between a primary snapshot and the preceding snapshot. Чтобы открыть разностный отчет, выберите одну из ссылок различия в области снимка.To open a diff report, select one of the difference links in a snapshot pane.

Обе ссылки открывают один и тот же отчет.Both links open the same report. Единственное различие заключается в начальном порядке сортировки дерева Управляемая куча в этом отчете.The only difference is the starting sort order of the Managed Heap tree in the report. Ссылка размера сортирует отчет по столбцу Разница инклюзивного размера (байт) . The size link sorts the report by the Inclusive Size Diff (Bytes) column. Ссылка объектов сортирует отчет по столбцу Разница по количеству.The objects link sorts the report by the Count Diff column. Вы можете изменить порядок или столбец сортировки после открытия отчета.You can change the sort column or order after the report opens.

Дерево «Управляемая куча» (отчеты о разнице между снимками)Managed Heap tree (Snapshot diff reports)

Дерево Управляемая куча перечисляет типы объектов, которые хранятся в памяти.The Managed Heap tree lists the types of objects that are held in memory. Вы можете развернуть имя типа, чтобы просмотреть десять самых крупных экземпляров этого типа, отсортированных по размеру.You can expand a type name to view the ten largest instances of the type, sorted by size. При выборе типа или экземпляра отображаются деревья Пути к корню и Объекты, на которые указывает ссылка для выбранного элемента. Select a type or instance to display the Paths to Root and Referenced Objects trees for the selected item.

Дерево Управляемая куча в отчете о различиях снимков содержит следующие столбцы:The Managed Heap tree in a snapshot diff report has the following columns:

nameNameОписаниеDescription
Тип объектаObject TypeИмя типа или экземпляра объекта.The name of the type or object instance.
КоличествоCountЧисло экземпляров типа в основном снимке.The number of instances of a type in the primary snapshot. Для экземпляра Количество всегда равно 1.Count is always 1 for an instance.
Разница количестваCount DiffДля типа разница в количестве экземпляров типа между основным и предыдущим снимками. For a type, the difference in the number of instances of the type between the primary snapshot and the previous snapshot. Для экземпляра это поле отображается пустым.The field is blank for an instance.
Размер (байт)Size (Bytes)Размер объектов в основном снимке без учета размера объектов, содержащихся в этих объектах.The size of the objects in the primary snapshot, less the size of objects in the objects. Для типа Размер (байт) и Инклюзивный размер (байт)  — это общие размеры экземпляров типа.For a type, Size (Bytes) and Inclusive Size (Bytes) are the totals of the sizes of the type instances.
Разница общего размера (байт)Total Size Diff (Bytes)Для типа — это разница в общем размере экземпляров типа между основным снимком и предыдущим снимком без учета размера объектов, содержащихся в этих экземплярах. For a type, the difference in the total size of instances of the type between the primary snapshot and the previous snapshot, less the size of objects in the instances. Для экземпляра это поле отображается пустым.The field is blank for an instance.
Инклюзивный размер (байт)Inclusive Size (Bytes)Размер объектов в основном снимке без учета размера объектов, содержащихся в этих объектах.The size of the objects in the primary snapshot, including the size of objects in the objects.
Разница инклюзивного размера (байт)Inclusive Size Diff (Bytes)Для типа — это разница в размере всех экземпляров типа между основным снимком и предыдущим снимком с учетом размера объектов, содержащихся в этих объектах.For a type, the difference in the size of all instances of the type between the primary snapshot and the previous snapshot, including the size of objects in the objects. Для экземпляра это поле отображается пустым. The field is blank for an instance.
МодульModuleМодуль, содержащий объект.The module that contains the object.

Дерево «Пути к корню» (отчеты о разнице между снимками)Paths to Root tree (Snapshot diff reports)

Дерево Пути к корню показывает цепочку объектов, ссылающихся на тип или экземпляр.The Paths to Root tree shows the chain of objects that reference a type or instance. Сборщик мусора .NET очищает память для объекта только после освобождения всех ссылок на него.The .NET garbage collector cleans up the memory for an object only when all references to it have been released.

Для типа в дереве Пути к корню число объектов, которые содержат ссылки на этот тип, отображается в столбце Количество ссылок.For a type in the Paths to Root tree, the number of objects that hold references to that type appears in the Reference Count column. Разница по количеству от предыдущего снимка указана в столбце в Reference Diff (Разница по ссылкам).The difference in count from the previous snapshot is in the Reference Diff column.

Дерево «Типы, на которые указывает ссылка» или «Объекты, на которые указывает ссылка» (отчеты о различиях снимков)Referenced Types or Referenced Objects tree (Snapshot diff reports)

Дерево Типы, на которые указывает ссылка или Объекты, на которые указывает ссылка показывает объекты, на которые ссылается выбранный тип или экземпляр.The Referenced Types or Referenced Objects tree shows the objects that the selected type or instance references.

Дерево Типы, на которые указывает ссылка в отчете о различиях снимков содержит следующие столбцы:A Referenced Types tree in a snapshot diff report has the following columns. Дерево Объекты, на которые указывает ссылка имеет столбцы Экземпляр, Размер (байт) , Инклюзивный размер (байт) и Модуль. A Referenced Objects tree has the Instance, Size (Bytes), Inclusive Size (Bytes), and Module columns.

nameNameОписаниеDescription
Тип объекта или ЭкземплярObject Type or InstanceИмя типа или экземпляра объекта.The name of the type or object instance.
Количество ссылокReference CountЧисло экземпляров типа в основном снимке.The number of instances of a type in the primary snapshot.
Разница числа ссылокReference Count DiffДля типа разница в количестве экземпляров типа между основным и предыдущим снимками.For a type, the difference in the number of instances of the type between the primary snapshot and the previous snapshot.
Размер (байт)Size (Bytes)Размер объектов в основном снимке без учета размера объектов, содержащихся в этих объектах. The size of the objects in the primary snapshot, less the size of objects in the objects. Для типа Размер (байт) и Инклюзивный размер (байт)  — это общие размеры экземпляров типа.For a type, Size (Bytes) and Inclusive Size (Bytes) are the totals of the sizes of the type instances.
Разница общего размера (байт)Total Size Diff (Bytes)Для типа — это разница в общем размере экземпляров типа между основным снимком и предыдущим снимком без учета размера объектов, содержащихся в этих экземплярах.For a type, the difference in the total size of instances of the type between the primary snapshot and the previous snapshot, less the size of objects in the instances.
Инклюзивный размер (байт)Inclusive Size (Bytes)Размер объектов в основном снимке без учета размера объектов, содержащихся в этих объектах.The size of the objects in the primary snapshot, including the size of objects in the objects.
Разница инклюзивного размера (байт)Inclusive Size Diff (Bytes)Для типа — это разница в размере всех экземпляров типа между основным снимком и предыдущим снимком с учетом размера объектов, содержащихся в этих объектах.For a type, the difference in the size of all instances of the type between the primary snapshot and the previous snapshot, including the size of objects in the objects.
МодульModuleМодуль, содержащий объект.The module that contains the object.

См. такжеSee also

Начало работы со средствами профилирования — Visual Studio



  • Чтение занимает 11 мин

В этой статье

Visual Studio предоставляет широкий набор средств профилирования для выявления различных типов проблем с производительностью в зависимости от типа приложения. Visual Studio provides a variety of profiling tools to help you diagnose different kinds of performance issues depending on your app type. В этой статье мы кратко рассмотрим наиболее распространенные средства профилирования.In this article, we give a quick look at the most common profiling tools.

См. дополнительные сведения о рекомендуемом средстве профилирования с поддержкой разных типов приложений.To see profiling tool support for different app types, see Which tool should I use?

Измерение производительности во время отладкиMeasure performance while debugging

Средства профилирования, которыми можно воспользоваться во время сеанса отладки, доступны в окне «Средства диагностики».The profiling tools that you can access during a debugging session are available in the Diagnostic Tools window. Окно «Средства диагностики» появится автоматически, если вы не отключали эту функцию.The Diagnostic Tools window appears automatically unless you have turned it off. Чтобы открыть окно, щелкните Отладка | Окна | Показать средства диагностики. To bring up the window, click Debug / Windows / Show Diagnostic Tools. В открытом окне можно выбирать средства, для которых требуется собрать данные.With the window open, you can select tools for which you want to collect data.

При отладке можно использовать окно Средства диагностики для анализа использования ЦП и памяти, а также просматривать события, отображающие сведения, связанные с производительностью.While you are debugging, you can use the Diagnostic Tools window to analyze CPU and memory usage, and you can view events that show performance-related information.

Использование окна Средства диагностики является распространенным способом профилирования приложений, но для сборок выпуска вместо этого также можно выполнять последующий анализ приложения.The Diagnostic Tools window is a common way to profile apps, but for Release builds you can also do a post-mortem analysis of your app instead. Дополнительные сведения о различных подходах см. в статье Выполнение средств профилирования с отладчиком и без него.For more information on different approaches, see Run profiling tools with or without the debugger. См. дополнительные сведения о рекомендуемом средстве профилирования с поддержкой разных типов приложений.To see profiling tool support for different app types, see Which tool should I use?

Средства, доступные в окне «Средства диагностики» или во время сеанса отладки:Tools available in the Diagnostic Tools window or during a debugging session include:

Примечание

Для запуска средств профилирования с отладчиком (окно Средства диагностики) требуется Windows 8 и более поздние версии.Windows 8 and later is required to run profiling tools with the debugger (Diagnostic Tools window). Вы можете использовать средства последующего анализа с Windows 7 и более поздними версиями.You can use the post-mortem tools with Windows 7 and later.

Измерение производительности в сборках выпускаMeasure performance in release builds

Средства в Профилировщике производительности предназначены для анализа сборок выпуска.Tools in the Performance Profiler are intended to provide analysis for Release builds. В профилировщике производительности можно собрать диагностические сведения во время работы приложения, а затем проанализировать их после его остановки (последующий анализ).In the Performance Profiler, you can collect diagnostic info while the app is running, and then examine the collected information after the app is stopped (a post-mortem analysis).

Откройте Профилировщик производительности, последовательно выбрав Отладка > Профилировщик производительности (или нажмите клавиши ALT + F2).Open the Performance Profiler by choosing Debug > Performance Profiler (or Alt + F2).

Дополнительные сведения об использовании средства «Загрузка ЦП» или «Использование памяти» в Профилировщике производительности и средств, встроенных в отладчик, см. в статье Запуск средств профилирования с отладчиком или без него.For more information on using the CPU Usage or Memory usage tool in the Performance Profiler vs. the debugger-integrated tools, see Run profiling tools with or without the debugger.

Средства, доступные в Профилировщике производительности:Tools available in the Performance Profiler include:

См. дополнительные сведения о рекомендуемом средстве профилирования с поддержкой разных типов приложений.To see profiling tool support for different app types, see Which tool should I use?

В некоторых сценариях в окне можно выбрать несколько средств профилирования.In some scenarios, the window allows you to select multiple profiling tools. Средства, такие как «Загрузка ЦП», могут предоставлять дополнительные данные, полезные для проведения анализа. Tools such as CPU Usage may provide complementary data that you can use to help in your analysis. Вы также можете использовать профилировщик командной строки, чтобы поддержать сценарии, включающие несколько средств профилирования.You can also use the command-line profiler to enable scenarios involving multiple profiling tools.

Проверка производительности с помощью PerfTipsExamine performance using PerfTips

Зачастую просмотреть сведения о производительности проще всего с помощью PerfTips.Often, the easiest way to view performance information is to use PerfTips. Используя подсказки, вы можете просматривать сведения о производительности непосредственно при взаимодействии с кодом.Using PerfTips, you can view performance information while interacting with your code. Можно проверить такие сведения, как длительность события (измеряется с момента последней приостановки отладчика или с момента запуска приложения).You can check information such as the duration of the event (measured from when the debugger was last paused, or when the app started). Например, при пошаговом выполнении кода (F10, F11) PerfTips отображает длительность выполнения приложения с операции на предыдущем шаге до текущего шага.For example, if you step through code (F10, F11), PerfTips show you the app runtime duration from the previous step operation to the current step.

PerfTips можно использовать для проверки длительности выполнения блока кода или времени, необходимого для завершения работы одной функции.You can use PerfTips to examine how long it takes for a code block to execute, or how long it takes for a single function to complete.

PerfTips отображает те же события, которые также выводятся в представлении События средств диагностики.PerfTips show the same events that also show up in the Events view of the Diagnostic Tools. В представлении События приводятся различные события, которые возникают при отладке, например операция задания точки останова или пошагового выполнения кода.In the Events view, you can view different events that occur while you are debugging, such as the setting of a breakpoint or a code stepping operation.

Примечание

Если у вас установлен выпуск Visual Studio Enterprise, на этой вкладке вы можете увидеть события IntelliTrace.If you have Visual Studio Enterprise, you can also see IntelliTrace events in this tab.

Анализ использования ЦПAnalyze CPU usage

Средство загрузки ЦП является хорошей отправной точкой для анализа производительности приложения.The CPU Usage tool is a good place to start analyzing your app’s performance. С его помощью вы получите дополнительные сведения о ресурсах ЦП, используемых приложением.It will tell you more about CPU resources that your app is consuming. Вы можете использовать средство «Загрузка ЦП», встроенное в отладчик, или средство «Использование ЦП»последующего анализа.You can use the debugger-integrated CPU Usage tool or the post-mortem CPU Usage tool.

При использовании средства «Загрузка ЦП», встроенного в отладчик, откройте окно «Средства диагностики» (если оно закрыто, выберите Отладка > Окна > Показать средства диагностики). When using the debugger-integrated CPU Usage tool, open the Diagnostics Tool window (if it’s closed, choose Debug / Windows / Show Diagnostic Tools). Во время отладки откройте представление Сводка и выберите Запись профиля ЦП.While debugging, open the Summary view, and select Record CPU Profile.

Единственный способ использовать средство — установить в коде две точки останова: одну в начале и одну в конце функции и области кода, которые требуется проанализировать.One way to use the tool is to set two breakpoints in your code, one at the beginning and one at the end of the function or the region of code you want to analyze. Проверьте данные профилирования во время приостановки во второй точке останова.Examine the profiling data when you are paused at the second breakpoint.

В представлении Загрузка ЦП отображается список функций, упорядоченных по самой продолжительно выполняющейся (эта функция расположена в верхней части). The CPU Usage view shows you a list of functions ordered by longest running, with the longest running function at the top. Это поможет переходить к функциям, где наблюдаются проблемы с производительностью.This can help guide you to functions where performance bottlenecks are happening.

Дважды щелкните нужную функцию, после чего откроется подробное представление с тремя панелями (представление «бабочки»): выбранная функция будет находиться в центре окна, вызываемая функция — в левой части, а вызывающая функция — в правой.Double-click on a function that you are interested in, and you will see a more detailed three-pane «butterfly» view, with the selected function in the middle of the window, the calling function on the left, and called functions on the right. В разделе Тело функции также показан общий объем времени (и доля времени), затраченного в теле функции за исключением времени, затраченного в вызываемых и вызывающих функциях.The Function Body section shows the total amount of time (and the percentage of time) spent in the function body excluding time spent in calling and called functions. Эти данные помогут оценить, оказывает ли негативное влияние на производительность сама функция.This data can help you evaluate whether the function itself is a performance bottleneck.

Анализ данных об использовании памятиAnalyze memory usage

В окне средств диагностики также можно оценить использование памяти в приложении с помощью средства Использование памяти.The Diagnostic Tools window also allows you to evaluate memory usage in your app using the Memory Usage tool. Например, можно узнать число и размер объектов в куче.For example, you can look at the number and size of objects on the heap. В Профилировщике производительности можно использовать средство «Использование памяти», встроенное в отладчик или средство «Использование памяти» для последующего анализа.You can use the debugger-integrated Memory Usage tool or the post-mortem Memory Usage tool in the Performance Profiler.

Разработчики . NET могут выбрать средство распределения объектов .NET или средство Использование памяти..NET developers may choose between either the .NET Object Allocation tool or the Memory usage tool.

  • Средство выделения объектов .NET помогает определять закономерности и аномалии выделения в коде .NET, а также обнаруживать распространенные проблемы, связанные со сборкой мусора.The .NET Object Allocation tool helps you identify allocation patterns and anomalies in your .NET code, and helps identify common issues with garbage collection. Оно используется только в качестве инструмента последующего анализа.This tool runs only as a post-mortem tool. Этот инструмент можно запускать на локальных или удаленных компьютерах.You can run this tool on local or remote machines.
  • Средство Использование памяти полезно при определении утечек в памяти, которые не являются характерными для приложений .NET.The Memory usage tool is helpful in identifying memory leaks, which are not typically common in . NET apps. Если при проверке памяти необходимо использовать функции отладчика, например пошаговое выполнение кода, рекомендуется выбирать средство «Использование памяти», встроенное в отладчик.If you need to use debugger features while checking memory, such as stepping through code, the debugger-integrated Memory usage tool is recommended.

Для анализа использования памяти с помощью средства использования памяти необходимо сделать хотя бы один моментальный снимок памяти.To analyze memory usage with the Memory Usage tool, you need to take at least one memory snapshot. Часто наилучшим способом анализа памяти является создание двух снимков: первый создается непосредственно перед возникновением потенциальной проблемы с памятью, а второй — сразу же после возникновения этой проблемы.Often, the best way to analyze memory is to take two snapshots; the first right before a suspected memory issue, and the second snapshot right after a suspected memory issue occurs. Затем можно просмотреть различия двух моментальных снимков и точно определить, что изменилось.Then you can view a diff of the two snapshots and see exactly what changed. На следующем рисунке показано создание моментального снимка с помощью средства, встроенного в отладчик.The following illustration shows taking a snapshot with the debugger-integrated tool.

При выборе одной из ссылок со стрелкой откроется разностное представление кучи (красная стрелка вверх показывает растущее количество объектов (слева) или увеличивающийся размер памяти (справа)).When you select one of the arrow links, you are given a differential view of the heap (a red up arrow shows an increasing object count (left) or an increasing heap size (right)). Если щелкнуть ссылку справа, откроется разностное представление кучи, упорядоченное по объектам, которые привели к максимальному увеличению размера кучи.If you click the right link, you get a differential heap view ordered by objects that increased the most in heap size. Это может помочь выявить проблемы с памятью.This can help you pinpoint memory problems. Например, на следующем рисунке байты, используемые объектами ClassHandlersStore, увеличены на 3 492 байт на втором моментальном снимке.For example, in the illustration below, the bytes used by ClassHandlersStore objects increased by 3,492 bytes in the second snapshot.

Если в представлении Использование памяти щелкнуть ссылку слева, представление кучи будет упорядочено по количеству объектов. Объекты определенного типа, количество которых максимально выросло, отображаются в верхней части (отсортированы по столбцу Count Diff (Разница числа)).If you click the link on the left instead in the Memory Usage view, the heap view is organized by object count; the objects of a particular type that increased the most in number are shown at the top (sorted by Count Diff column).

Анализ использования ресурсов (XAML)Analyze resource consumption (XAML)

В приложениях XAML, таких как классические приложения WPF и приложения универсальной платформы Windows, можно анализировать потребление ресурсов, используя средство «Временная шкала приложения». In XAML apps, such as Windows desktop WPF apps and UWP apps, you can analyze resource consumption using the Application Timeline tool. Например, вы можете проанализировать время, затраченное приложением на подготовку кадров пользовательского интерфейса (макет и обработка), обработку запросов от сети и дисков, а также на такие сценарии, как запуск приложения, загрузка страницы и изменение размера окон.For example, you can analyze the time spent by your application preparing UI frames (layout and render), servicing network and disk requests, and in scenarios like application startup, page load, and Window resize. Чтобы использовать это средство, выберите Временная шкала приложения в профилировщике производительности и нажмите кнопку Запустить.To use the tool, choose Application Timeline in the Performance Profiler, and then choose Start. В приложении выполните сценарий с предполагаемой проблемой потребления ресурсов, а затем щелкните Остановка сбора, чтобы создать отчет. In your app, go through the scenario with a suspected resource consumption issue, and then choose Stop collection to generate the report.

Низкие значения частоты кадров на графе Пропускная способность визуализации может означать наличие проблем визуализации, присутствующих при запуске приложения.Low framerates in the Visual throughput graph may correspond to visual problems that you see when running your app. Аналогично, высокие показатели на графе Использование потока пользовательского интерфейса могут соответствовать проблемам со скоростью отклика пользовательского интерфейса.Similarly, high numbers in the UI thread utilization graph may also correspond to UI responsiveness issues. В отчете можно выбрать временной период предполагаемой проблемы производительности и затем в представлении «Подробная временная шкала» (нижняя панель) изучить подробные действия потока пользовательского интерфейса.In the report, you can select a time period with a suspected performance issue, and then examine the detailed UI thread activities in the Timeline details view (lower pane).

В представлении «Подробная временная шкала» находятся такие сведения, как тип действия (или затронутый элемент пользовательского интерфейса), а также длительность действия.In the Timeline details view, you can find information such as the type of activity (or the UI element involved) along with the duration of the activity. Например, на рисунке событие Макета для элемента управления сетки длится 57,53 мс.For example, in the illustration, a Layout event for a Grid control takes 57.53 ms.

Дополнительные сведения см. в разделе Временная шкала приложения.For more information, see Application Timeline.

Изучение событий приложенияExamine application events

Средство просмотра общих событий позволяет просматривать действия приложения с помощью списка событий, таких как загрузка модуля, запуск потока и конфигурации системы. Это позволяет эффективнее диагностировать работу приложения в профилировщике Visual Studio.The generic events viewer allows you to view the activity of your application through a list of events, such as module load, thread start, and system configurations, to help better diagnose how your application is performing right within the Visual Studio profiler. Это средство доступно в Профилировщике производительности.This tool is available in the Performance Profiler. Откройте Профилировщик производительности, последовательно выбрав Отладка > Профилировщик производительности (или нажмите клавиши ALT + F2).Open the Performance Profiler by choosing Debug > Performance Profiler (or Alt + F2).

Это средство отображает каждое событие в представлении списка.The tool shows each event in a list view. Столбцы содержат сведения о каждом событии, например имя события, метку времени и идентификатор процесса.Columns provide information about each event, such as the event name, timestamp, and process ID.

Анализ асинхронного кода (.NET)Analyze asynchronous code (.NET)

Средство .NET Async позволяет проанализировать производительность асинхронного кода в приложении.The .NET Async Tool allows you to analyze the performance of asynchronous code in your application. Это средство доступно в Профилировщике производительности.This tool is available in the Performance Profiler. Откройте Профилировщик производительности, последовательно выбрав Отладка > Профилировщик производительности (или нажмите клавиши ALT + F2).Open the Performance Profiler by choosing Debug > Performance Profiler (or Alt + F2).

Средство отображает все асинхронные операции в представлении списка.The tool shows each async operation in a list view. Вы можете просмотреть такие сведения, как время начала и окончания, а также общее время асинхронной операции.You can see information such as the start time, end time, and total time for an async operation.

Анализ производительности базы данных (.NET Core)Analyze database performance (.NET Core)

Для приложений .NET Core, использующих ADO.NET или Entity Framework Core, средство для работы с базами данных позволяет записывать запросы к базам данных, которые приложение выполняет во время диагностического сеанса. For .NET Core apps that use ADO.NET or Entity Framework Core, the Database Tool allows you to record the database queries that your application makes during a diagnostic session. Сведения об отдельных запросах затем можно анализировать, чтобы определить области для улучшения производительности приложения.You can then analyze information about individual queries in order to find places where your app’s performance can be improved. Это средство доступно в Профилировщике производительности.This tool is available in the Performance Profiler. Откройте Профилировщик производительности, последовательно выбрав Отладка > Профилировщик производительности (или нажмите клавиши ALT + F2).Open the Performance Profiler by choosing Debug > Performance Profiler (or Alt + F2).

Это средство отображает каждый запрос в представлении списка.The tool shows each query in a list view. Вы можете просмотреть такие сведения, как время начала и длительность запроса. You can see information such as the query start time and duration.

Проверка событий производительности и доступности пользовательского интерфейса (UWP)Examine UI performance and accessibility events (UWP)

В приложениях UWP в окне Средства диагностики можно включить параметр Анализ пользовательского интерфейса.In your UWP apps, you can enable UI Analysis in the Diagnostic Tools window. Средство выполняет поиск общих проблем производительности или доступности и во время отладки отображает их в представлении События.The tool searches for common performance or accessibility issues and displays them in the Events view while you are debugging. В описаниях событий содержатся сведения, которые могут помочь при устранении неполадок.The event descriptions provide information that can help resolve issues.

Анализ использования GPU (Direct3D)Analyze GPU Usage (Direct3D)

В приложениях Direct3D (компоненты Direct3D должны быть в C++) можно изучить действие GPU и проанализировать проблемы производительности.In Direct3D apps (Direct3D components must be in C++), you can examine activity on the GPU and analyze performance issues. Дополнительные сведения см. в разделе Использование GPU.For more information, see GPU Usage. Чтобы использовать это средство, выберите Использование GPU в профилировщике производительности и нажмите кнопку Запустить.To use the tool, choose GPU Usage in the Performance Profiler, and then choose Start. В приложении выполните нужные действия профилирования, а затем щелкните Остановка сбора, чтобы создать отчет.In your app, go through the scenario that you’re interested in profiling, and then choose Stop collection to generate a report.

Выберите период времени на графах и щелкните Просмотреть сведения. В нижней панели появится представление подробных сведений.When you select a time period in the graphs and choose view details, a detailed view appears in the lower pane. В этом представлении можно узнать, сколько событий происходит в каждом ЦП и графическом процессоре.In the detailed view, you can examine how much activity is happening on each CPU and GPU. Выбирайте события в самой нижней панели, чтобы открывать всплывающие окна на временной шкале.Select events in the lowest pane to get popups in the timeline. Например, выберите событие Присутствующие, чтобы просмотреть всплывающие окна по вызову Присутствующий.For example, select the Present event to view Present call popups. (Светло-серые вертикальные линии Vsync можно использовать в качестве точек отсчета для понимания того, пропустили ли вертикальную синхронизацию определенные вызовы с типом Присутствующий.(The light gray vertical VSync lines can be used as a reference to understand whether certain Present calls missed VSync. Чтобы приложение выводило изображение со стабильной частотой в 60 кадров/с, между каждыми двумя вертикальными синхронизациями должен выполняться один вызов с типом Присутствующий.There must be one Present call between every two VSyncs in order for the app to steadily hit 60 FPS.)

Графы также можно использовать для определения узких мест производительности ЦП или GPU.You can also use the graphs to determine whether there are CPU bound or GPU bound performance bottlenecks.

Анализ производительности (JavaScript UWP)Analyze performance (JavaScript UWP)

Для приложений UWP можно использовать средство «Память JavaScript» и средство «Скорость реагирования пользовательского интерфейса HTML».For UWP apps, you can use the JavaScript Memory tool and the HTML UI Responsiveness tool.

Средство «Память JavaScript» аналогично средству «Использование памяти», доступному для других типов приложений.The JavaScript Memory tool is similar to the Memory Usage tool available for other app types. Это средство можно использовать для анализа использования памяти и поиска утечек памяти в приложении.You can use this tool to understand memory usage and find memory leaks in your app. Дополнительные сведения об этом средстве см. в разделе Память JavaScript.For more details about the tool, see JavaScript Memory.

Для диагностики скорости отклика пользовательского интерфейса, медленной загрузки и медленных визуальных обновлений в приложениях UWP используйте средство «Скорость реагирования пользовательского интерфейса HTML».To diagnose UI responsiveness, slow loading time, and slow visual updates in UWP apps, use the HTML UI Responsiveness tool. Это средство аналогично инструменту «Временная шкала приложения» для других типов приложений.Usage is similar to the Application Timeline tool for other app types. Дополнительные сведения см. в разделе Скорость реагирования пользовательского интерфейса HTML.For more information, see HTML UI responsiveness.

Анализ использования сети (UWP)Analyze network usage (UWP)

В приложениях UWP можно анализировать выполненные сетевые операции с помощью API Windows.Web.Http.In UWP apps, you can analyze network operations performed using the Windows.Web.Http API. Это средство поможет вам устранить проблемы, включая проблемы с доступом и проверкой подлинности, неправильным использованием кэша и низкой производительностью процесса отображения и скачивания.This tool may help you to resolve issues like access and authentication problems, incorrect cache-use, and poor display and download performance. Чтобы использовать это средство, выберите Сеть в профилировщике производительности и нажмите кнопку Запустить.To use the tool, choose Network in the Performance Profiler, and then choose Start. В приложении выполните нужные действия, где используется Windows.Web.Http, а затем щелкните Остановка сбора, чтобы создать отчет.In your app, go through the scenario that uses Windows.Web.Http, and then choose Stop collection to generate the report.

Выберите операцию в представлении «Сводка», чтобы просмотреть более подробные сведения.Select an operation in the summary view to view more details.

Дополнительные сведения см. в разделе Использование сети.For more information, see Network Usage.

Если требуются функции, которые в настоящее время отсутствуют в средствах «Загрузка ЦП» или «Использование памяти», и вы работаете с классическими приложениями или приложениями ASP.NET, воспользуйтесь обозревателем производительности, поддерживающем профилирование.If you need features such as instrumentation that are not currently present in CPU Usage or Memory Usage tools, and you are running desktop or ASP.NET apps, you can use the Performance Explorer for profiling. (Не поддерживается в приложениях UWP).(Not supported in UWP apps). Дополнительные сведения см. в разделе Обозреватель производительности.For more info, see Performance Explorer.

В Visual Studio 2019 устаревший Обозреватель производительности и связанные средства профилирования, такие как мастер производительности, были объединены в Профилировщик производительности, который можно открыть с помощью команды Отладка > Профилировщик производительности.In Visual Studio 2019, the legacy Performance Explorer and related profiling tools such as the Performance Wizard were folded into the Performance Profiler, which you can open using Debug > Performance Profiler. В Профилировщике производительности доступные средства диагностики зависят от выбранного целевого объекта и текущего открытого запускаемого проекта.In the Performance Profiler, the available diagnostics tools depend on the target chosen and the current, open startup project. Инструмент «Загрузка ЦП» предоставляет возможности выборки, ранее поддерживаемые мастером производительности.The CPU Usage tool provides the sampling capability previously supported in the Performance Wizard. Средство инструментирования предоставляет возможность профилирования с инструментированием (для точного числа и длительности вызовов), которая была представлена в мастере производительности.The Instrumentation tool provides the instrumented profiling capability (for precise call counts and durations) that was in the Performance Wizard. В Профилировщике производительности также содержатся дополнительные средства памяти.Additional memory tools also appear in the Performance Profiler.

Ниже приведена таблица со списком различных средств, предлагаемых в Visual Studio, и различных типов проектов, в которых эти средства можно использовать.Here is a table that lists the different tools Visual Studio offers and the different project types you can use them with:

См. такжеSee also

Профилирование приложений в Visual Studio 2010 / Хабр

Сегодня мы будем замерять производительность нашего приложения с помощью Visual Studio Profiling Tool.

Visual Studio Profiling Tool позволяет разработчикам измерять, оценивать производительность приложения и кода. Эти инструменты полностью встроены в IDE, чтобы предоставить разработчику беспрерывный контроль.

В этом руководстве мы по шагам профилируем приложение PeopleTrax используя Sampling и Instrumentation методы профилирования, чтобы выявить проблемы в производительности приложения.

Много картинок.

Подготовка

Для работы с этим руководством вам потребуется:

  • Microsoft Visual Studio 2010
  • Средние знания языка C#
  • Копия тестового приложения PeopleTrax, скачать можно с MSDN Code Gallery
Методы профилирования

Чуть-чуть отступим от главной темы статьи и рассмотрим возможные методы профилирования. Эту главу можно пропустить, используемые методы профилирования будут кратко описаны перед использованием.

Sampling

Sampling — собирает статистические данные о работе приложения (во время профилирования). Этот метод легковесный и поэтому, в результате его работы очень маленькая погрешность в полученных данных.

Каждый определенный интервал времени собирается информация о стеке вызовов (call stack). На основе этих данные производится подсчет производительности. Используется для первоначального профилирования и для определения проблем связанных с использование процессора.

Instrumentation

Instrumentation — собирает детализированную информацию о времени работы каждой вызванной функции. Используется для замера производительности операций ввода/вывода.

Метод внедряет свой код в двоичный файл, который фиксирует информацию о синхронизации (времени) для каждой функции в файл, и для каждой функции которые вызываются в этой.

Отчет содержит 4 значения для предоставления затраченного времени:

  • Elapsed Inclusive — общее время, затраченное на выполнение функции
  • Application Inclusive — время, затраченное на выполнение функции, за исключением времени обращений к операционной системе.
  • Elapsed Exclusive — время, затраченное на выполнение кода в теле. Время, которое тратят функции, вызванные целевой функцией.
  • Application Exclusive — время, затраченное на выполнение кода в теле. Исключается время, которое тратится выполнения вызовов операционной системы и время, затраченное на выполнение функций, вызванные целевой функцией.
Concurrency

Concurrency – собирает информацию о многопоточных приложения (как отлаживать многопоточные приложения см. «Руководство по отладке многопоточных приложений в Visual Studio 2010»). Метод собирает подробную информацию о стеке вызовов, каждый раз, когда конкурирующие потоки вынуждены ждать доступа к ресурсу.

.NET Memory

.NET Memory — профайлер собирает информацию о типе, размере, а также количество объектов, которые были созданы в распределении или были уничтожены сборщиком мусора. Профилирование памяти почти не влияет на производительность приложения в целом.

Tier Interaction

Tier Interaction – добавляет информацию в файл для профилирования о синхронных вызовах ADO.NET между страницей ASP.NET или другими приложениями и SQL сервера. Данные включают число и время вызовов, а также максимальное и минимальное время.

На этом рассмотрение методов профилирование закончим и продолжим учиться профилировать приложения.

Профилирование Sampling методом

Sampling это метод профилирования, который периодически опрашивает рассматриваемый процесс, чтобы определить активную функцию. В результате показывает количество раз, когда функция была в начале call stack во время тестирования.

Профилирование

Открываем тестовый проект PeopleTrax. Устанавливаем конфигурацию в Release (в Debug версию встраивается дополнительная информация для отладки приложения, и она плохо скажется на точности результатов профилирования).

В меню Analyze нажимаем на Launch Performance Wizard.

На этом шаге нужно выбрать метод профилирования. Выбираем CPU Sampling (recommended) и нажимаем Next.

Выбираем какое приложение мы будем профилировать, это PeopleTrax и кнопка Next. В следующем нажимаем Finish и автоматически запустится профайлер и наше приложение. На экране мы видим программу PeopleTrax. Нажимаем кнопку Get People, ждем завершения работы и Export Data. Закрываем блокнот и программу и профайлер сгенерирует отчет.

Профайлер сгенерировал отчет (*.vsp)

Анализ отчета Sampling метода

В Summary отображается график использования процессора в течение всего времени профилирования. Список Hot Path показывает ветки вызовов, которые проявили наибольшую активность. А в списке Functions Doing Most Individual Work (название которого говорит само за себя) – функции, которые занимали большее время процесса в теле этих функций.

Посмотрев на список Hot Path видим что метод PeopleNS.People.GetNames занимает почти последнее место в ветке вызовов. Его то и можно изучить внимательнее на предмет улучшения производительности. Нажимаем на PeopleNS.People.GetNames и перед нами открывается Function Details.

Это окно содержит две части. Окно расходов предусматривает графическое представление работы функций, и вклад функции и вызывающих ее на количество экземпляров, которые были отобраны. Можно изменить рассматриваемую функцию, нажав на нее мышкой.

Function Code View показывает код метода, когда он доступен и подсвечивает наиболее «дорогие» строки в выбранном методе. Когда выбран метод GetNames видно, что он читает строки из ресурсов приложения используя StringReader, добавляя каждую строку в ArrayList. Нет очевидных способов улучшить эту часть.

Так как PeopleNS.People.GetPeople единственный, кто вызывает GetNames – нажимаем GetPeople. Этот метод возвращает ArrayList объектов PersonInformationNS.PersonInformation с именами людей и компаний, возвращенными методом GetNames. Тем не менее, GetNames вызывается дважды каждый раз, когда создается PersonInformation. (Это и показано желтым и красным выделением). Очевидно, что можно легко оптимизировать метод, создавая списки только один раз вначале метода.

Альтернативная версия GetPeople также есть в коде и мы ее сейчас включим. Для этого нужно определить OPTIMIZED_GETPEOPLE как Conditional compilation symbol в окне свойств проекта People и PeopleTrax. И да, если захотите повторить мои опыты, то нужно исправить ошибку в проекте. В оптимизированном конструкторе класса не правильно написано имя ресурсов: нужно PeopleNS.Resources вместе PeopleNS.Resource. Если это не изменить, все валится со страшными ошибками.

Оптимизированный метод заменит старый при следующей сборке.

Перезапускаем профилирование в текущей сессии нажав Launch with Profiling в окне Performance Explorer. Нажимаем на Get People и Export Data. Закрываем блокнот и программу а профайлер сгенерирует новый отчет.

Чтобы сравнить два отчета – выбираем оба и ПКМ Compare Performance Reports. Колонка дельты показывает разницу в производительности версии Baseline с более поздней Comparison. Выбираем Inclusive Samples % и Apply.

Как видно выигрыш в производительности заметен невооруженным глазом

Профилирование методом Instrumentation

Этот метод полезен при профилировании операций ввода вывода, запись на диск и при обмене данными по сети. Этот метод предоставляет больше информации чем предыдущий, но он несет с собой больше накладных расходов. Бинарники полученные после вставки дополнительного кода получаются больше обычных, и не предназначены для развертывания.

В этот раз мы сосредоточим наш анализ на экспорте данных, в котором список людей записывается в файл блокнота.

Профилирование

В Performance Explorer выбираем Instrumentation и нажмаем Start Profiling. Нажимаем Get People. После загрузки людей ждем 10 секунд и нажмаем Export Data. Закрываем блокнот и программу. Профилировщик сгенерирует отчет.

Анализ

Профилировщик покажет такую картинку:

Мы не получили ту информацию, которую хотели. Отфильтруем данные. Мы специально ждали 10 секунд, чтобы просто отфильтровать ненужные сейчас данные профилирования. Отмечаем с 13-й до конца и нажимаем Filter by selection. Уже другой результат:

Hot Path показывает, что метод Concat занимает много времени (он также первый в списке Functions With Most Individual Work). Нажимаем на Concat, чтобы посмотреть детально информацию о методе.

Видно, что PeopleTrax.Form1.ExportData – единственный метод, который вызывает Concat. Нажимаем PeopleTrax.Form1.ExportData в вызывающих методах (Function calling this function).

Анализируем метод в окне кода. Обратите внимание, что нет прямого вызова Concat. Вместе этого есть использование операнда +=, который компилятор заменяет на методы System.String.Concat. Как уже почти все знают, что любые изменения в строках в .NET приводят к уничтожению старой версии строки и созданию измененной строки. К счастью в .NET есть класс StringBuilder который и предназначен для такой работы.

В проекте уже есть оптимизированный метод с использованием StringBuilder. В проекте PeopleTrax добавляем переменную компиляции OPTIMIZED_EXPORTDATA. Сохраняем и снова запускаем профайлер и сравниваем отчеты. Сразу видно (да и логически понятно) что мы оптимизировали вызовы Concat (с 6000 до 0 раз).

После запуска приложения на глаз видно заметное улучшение производительности. Очень важно запускать профилирование еще раз, даже есть видимые улучшения. Просмотр новых данных после исправления проблемы может показать другие проблемы в производительности приложений.

Литература

Спасибо за внимание. Быстрого как молния вам кода.

Есть ли такой профилировщик, как visual studio profiler, который работает под виртуальной машиной?

Мы используем лабораторию ec2 для работы над нашим продуктом. Продукт, над которым я сейчас работаю, написан на LISP, Java, C/C++. и имеет множество компонентов. Моя задача состоит в том, чтобы профилировать его, найти узкое место производительности. Я могу загрузить компоненты C/C++ в vs2008ts, чтобы скомпилировать его. Поскольку это версия командной системы, я тоже могу ее проанализировать. Но проблема в том, что visual studio profiler не работает в виртуальной среде.

Итак, мой вопрос заключается в том, есть ли какой-либо профилировщик, который я могу использовать в виртуальной среде? или есть какой-то обходной путь для visual studio profiler??

Необходимую информацию

  • Операционная Система: Windows Server 2003 R2
  • Разработка Env: Visual Studio 2008 Командная Система
  • Физическая Память: 7.5GB
  • Тип приложения: MFC и консоль
  • SCM: подрывная деятельность

visual-studio-2008

profiling

profiler

virtual-machine

Поделиться

Источник


Shiplu Mokaddim    

05 августа 2010 в 20:18

2 ответа


  • Как отлаживать проекты Visual Studio с помощью VMware?

    Я только что установил WMware Workstation в первый раз и заметил, что она включает в себя некоторые новые панели инструментов в Visual Studio, чтобы я мог отлаживать приложения на виртуальной машине. Кто-нибудь использовал эту функцию? Как вы его используете и что с ним отлаживаете? Каковы…

  • Почему код CUDA работает так быстро в Nvidia Visual Profiler?

    Фрагмент кода, который занимает более 1 минуты в командной строке , был выполнен за считанные секунды в Nvidia Visual Profiler (работает тот же .exe). Поэтому возникает естественный вопрос: почему? Есть ли что-то не так с командной строкой, или Visual Profiler делает что-то другое и на самом деле…



1

Я не уверен, что это поможет, но профилировщик в Visual Studio 2010 (Premium и Ultimate) действительно поддерживает профилирование на виртуальных машинах.

Также обратите внимание, что вы можете использовать профилирование инструментария с VS2008 на виртуальной машине, хотя пример профилирования не поддерживается.

Поделиться


Colin Thomsen    

02 ноября 2010 в 00:02



1

Профилировщики моей компании для C, C++ и Java предназначены для работы в различных средах выполнения, включая встроенные среды. Они должны нормально работать на виртуальной машине, хотя вам, возможно, придется настроить их для выполнения встраиваемой среды. Это не трудно.

Поделиться


Ira Baxter    

08 августа 2010 в 05:43


Похожие вопросы:

Есть ли что-то вроде Ants Performance Profiler, но для C++?

Возможный Дубликат : Профилировщик для Visual Studio 2008, C++? Привет Существуют ли какие-либо профилировщики для C++ ?? Мне нужно что — то, что исследовало бы слабые места моего приложения-под…

Есть ли такой диспетчер задач, как приложение для visual studio?

Иногда я чувствую, что Visual Studio 2010 очень вялый. У меня есть некоторые плагины, например ReSharper, которые, как мне кажется, могут быть виновниками. Было бы неплохо, если бы я мог увидеть…

Visual Studio 2008 Profiler-Instrumented дает странные результаты

Я запускаю профилировщик Visual Studio 2008 на сборке RelDebug моего приложения. Оптимизация включена, но встраивание только умеренное, присутствуют стековые фреймы и символы испускаются. Другими…

Как отлаживать проекты Visual Studio с помощью VMware?

Я только что установил WMware Workstation в первый раз и заметил, что она включает в себя некоторые новые панели инструментов в Visual Studio, чтобы я мог отлаживать приложения на виртуальной…

Почему код CUDA работает так быстро в Nvidia Visual Profiler?

Фрагмент кода, который занимает более 1 минуты в командной строке , был выполнен за считанные секунды в Nvidia Visual Profiler (работает тот же .exe). Поэтому возникает естественный вопрос: почему?…

Ошибка при использовании Nvidia Compute Visual Profiler

Мне удалось использовать визуальный профилировщик и получить некоторые результаты. Хотя есть одно приложение, которое я не могу получить никаких результатов с помощью Visual profiler и получить…

Является ли LLVM типичной виртуальной машиной?

Мне интересно, является ли LLVM типичной виртуальной машиной, такой как Java или .Net, или это просто среда выполнения, такая же, как oridinary C++ runtime?

Является ли новый ART виртуальной машиной?

Я читал статьи в интернете о новой среде выполнения ART для операционной системы Android. Многие статьи называют ART новой виртуальной машиной, что, на мой взгляд, неверно, поскольку приложения…

VS2015-как прикрепить профилировщик к проекту cloud?

В предыдущей версии Visual Studio я бы следовать этому руководству https://azure.microsoft.com/en-us/…

Xamarin профилировщик не отображается на вкладке анализ в Visual Studio 2017

Недавно я скачал профилировщик Xamarin отсюда: https:/ / www.xamarin.com / профилировщик и пытался запустить тестирование производительности для моего приложения iOS. Однако согласно документам…

Blazor hot reload

This made the hot-reload or rather hot-restart going but only for Blazor Server project. I haven’t tested the WASM version.Blazor has a powerful templating system, which you should consider using at any time you feel there’s a piece of the view that could be reused throughout the project. _Imports.razor: a place you can use to centralize all the using statements of your Blazor pages. App.razor: where everything starts, the root of a Blazor app. Its job is …
Blazor framework is not supported by versions below Visual Studio 2017 v15.7. Source Code. It will create the Blazor solution. You can observe the folder structure in Solution Explorer as shown in the…Blazor Server Hot Reload February 18, 2020 February 19, 2020 by Thijs Tijsma 12 Comments on Blazor Server Hot Reload I was working on the UI of a Blazor Server project the other day and had this cycle going on:
Hot Reload Invalid arguments for method ‘Load’ 1 Solution WinForm(.NET Core project) Designer bug 0 Solution Since v16.3 the IDE is extremely slow 2 Solution Unprintable characters cause Visual Studio to open file in Notepad 0 Solution CPUが常に100%Telegram group links uganda
Aug 12, 2017 · There is no native hot reloading or even runtime compilation for blazor full stop. This is exactly why it’s a non started for me. View Entire Discussion (14 Comments)There’s a hot new XAML hot reload tips and tricks article you must read and give you the scoop on gRPC and Azure Service Bus. And of course, the Azure Service of the Month and the Pick of the Pod! Show Notes Latest Releases. Xamarin.Essentials 1.4.0-pre; Xamarin News. Santa Talk Challenge Recap; Top blogs of 2019; Top videos of 2019; Android …
On this site you can play in DOOM in browser. NOTES: If you have problems with the mouse positioning of the mouse, then try to switching on Fullscreen mode; While the browser is loading the program, it may hang up for a whileBlazor Webassembly Hot Reload visual studio 2019 version 16.6 windows 10.0 pedrodiogo4470 reported Jun 24 at 04:52 PM There is much to do in Blazor about Javascript, hot reload and server-side flexibility. If you write a game, signalR socket is a very handy tool.
Announcing Blazored Modal, a JavaScript-free modal library for client-side and server-side Blazored Modal is here. Please note: There have been several breaking changes since this post was written.blazor67. Blazor Blazor. 1 Watcher654 Page Views2 Deviations. Profile Navigation.
Updated for .NET Core 3.1 and Blazor 3.2, introducing lazy components, improved data binders, and more. … Bolero 0.3 released with HTML template hot reloading.Nov 05, 2020 · Since Blazor WebAssembly is a standards-based client-side web app platform, developers have the ability to leverage these browser APIs and create PWAs using .NET. In this episode, Jeremy is joined by Dan Roth to discuss the built in support for building PWAs with Blazor and show us a few demos of how get started.
Dec 22, 2020 · Hot Module Replacement (HMR), often referred to as Hot Module Reloading, is a once old now brought back feature in Angular v11. The arrival of Ivy has allowed us to do so many many things, not the least of which is use HMR. So what is Hot Module Replacement? Obviously, from the name, we can deduce that it replaces modules in hot mode.Cutting Edge, Fast & Mobile Ready. Leverages Canvas 2D, WebGL, and all the latest greatness from HTML5. Mobile support out of the box. Build lightweight custom profiles with just the components you need.
May 14, 2020 · Blazor template with menu across the top, We will create two dropdown lists — Country and City. Upon selecting… NET Core Blazor Language Services extension from here; SQL Server 2008 or above. Blazor NET Core Web Application” from the available project types. Client/ Shared/NavMenu.cshtml” page and put the following code into it. Sub-menu.なんてことが書いてあります。Blazor関係ない・・・ この記事にはコメントがあるのですが「そんなことよりhot-reload入れろよ!」とかあります。 個人的には「WebAssemblyのデバッグサポートお願いします!」ですね。
Ed returns to share and answer some of the most frequently asked questions he receives when showing folks Blazor (docs.microsoft.com/en-us/aspnet/core/blazor/?view=aspnetcore-3.0).Bolero is built on top of Blazor and adds a lot of features designed specifically to work in F#: Elmish Model-View-Update architecture for a functional approach to reactive content. HTML-in-F# syntax inspired by WebSharper.UI and Fable. Alternatively, HTML templates with hot reloading provide a comfortable design experience.
DevExpress Blazor UI Components suite includes the high-performance Data Grid, PivotGrid Create high-impact user experiences for both Blazor Server and Blazor WebAssembly using C#.Последние твиты от awesomeblazor (@awesomeblazor). A collection of awesome #Blazor resources on #GitHub.
Fortunately (or unfortunately?), the Blazor app doesn’t provide the «CSS component» feature, at this Therefore, I thought that the «CSS live reloading» feature (especially, without reloading the entire…Agility: Blazor’s unique leg design allows him to run at amazing speeds and turn corners quickly to hunt down his prey! Search & Destroy: Blazor will explore his environment looking for prey. He will avoid obstacles while searching, but it he finds another Blazor, he will attack with speed and ferocity!
Discussion on Blazor, a framework for building web apps with .NET and WebAssembly https I’ve written zero Blazor since before christmas — and that was just reviewing/tweaking a PR.Aug 13, 2020 · NOTE: To enable hot reloading during development so the app automatically restarts when a file is changed, start the app with the command dotnet watch run. Running the Blazor WebAssembly App with an ASP.NET Core 3.1 API. For full details about the example ASP.NET Core API see the post ASP.NET Core 3.1 — JWT Authentication Tutorial with Example …
Blazor Webassembly Hot Reload visual studio 2019 version 16.6 windows 10.0 pedrodiogo4470 reported Jun 24 at 04:52 PMLearn Blazor today: find your Blazor online course on Udemy.
May 29, 2018 · Fixing Hot Code Reload. If you change the source code of your front-end application you will not get updates hot code reloaded without manually … .NET Blazor …Blazor Quick Start Guide book. Read reviews from world’s largest community for readers. Goodreads helps you keep track of books you want to read. Start by marking «Blazor Quick Start Guide: Build…
Blazor Quick Start Guide book. Read reviews from world’s largest community for readers. Goodreads helps you keep track of books you want to read. Start by marking «Blazor Quick Start Guide: Build…A Blazor app can be compiled into WebAssembly and can thereby be a first-class web citizen and also really fast. If you are completely new to Blazor I recommend reading this intro article. What is Azure Static Web apps service. Static Web Apps is an Azure service with which you can deploy fullstack apps within minutes.
Install-Package Blazored.LocalStorage -Version 3.0.0. RapidCMS is a Blazor framework which allows you to build a responsive and flexible CMS purely from code.Jun 04, 2019 · Blazor-Fluxor is a zero boilerplate Flux/Redux library for the new Microsoft aspdotnet Blazor project. The aim of Fluxor is to create a single-state store approach to front-end development in Blazor without the headaches typically associated with other implementations, such as the overwhelming amount of boiler-plate code required just to add a …
Sep 28, 2018 · Hot Rebuild: Automatically rebuild modified source or SCSS code (hot reloading not available, yet). Component Generation: Quickly generate Blazor pages, layouts, components, and services. Modular Platform Architecture: Project deployment platforms are provided through plugins and isolated within each project.Mar 27, 2019 · At first glance, this might sound quite tedious, but hot reload makes it very fast to experiment with complicated user interfaces. The downside is that you have some large files to define a widget; for example, in Red Brogdon’s open-source flutterflip reversi clone, the main game board widget is around 170 lines long.
Blazor PWA 에디션과 마찬가지로 현재 기획단계에 있는 에디션. 플랫폼에 종속적이지만 기존 웹 기술[5]을 [1] 이는 Blazor WebAssembly 에디션만 해당된다.[2] Single-Page Application 의 약자로…Server-side component of the HTML template hot reloading for Bolero: a set of tools and libraries to run F# applications in WebAssembly using Blazor 10.4K GitHub repositories
I didnt specify but we actually mostly use server side Blazor for now. The only issue with it so far is lack of proper hot reload which is annoying but manageable. Otherwise, it’s really great. It’s kinda an equivalent of Phoenix’ LiveView.This made the hot-reload or rather hot-restart going but only for Blazor Server project. I haven’t tested the WASM version.
View Example: Blazor Data Grid — How to save/load a grid’s layout information. Specify the Key Field. The Data Grid should be able to identify individual data items when users edit data, select data rows, or expand detail rows in master-detail layouts. You can specify the key data field in one of the following ways:Blazor is new framework for building Web applications. Blazor is a new .NET web framework for creating client-side applications using C#/Razor and HTML that runs in the browser with WebAssembly.
Get started with Microsoft Blazor, the framework for building rich web apps with C# and .NET. Learn how Blazor allows .NET code to run in the browser…LiveSharp is a cross-platform hot-reload tool for .NET projects.
Real-time Data fetching with GraphQL and Blazor Hot Chocolate is a GraphQL platform for that can help you build a GraphQL layer over your existing and new infrastructure. In this episode, we’re joined by the author of Hot Chocolate, Michael Staib, who shows us how we can start creating GraphQL based Web APIs with Hot Chocolate and some other …Jul 21, 2020 · Hi Stephen. Unfortunately, Blazor support for hot reload and AoT compilation both had to be pushed out to .NET 6 due to the short remaining timeframe for .NET 5. We are working on some improvements to dotnet watch for .NET 5 that should improve the dev experience from the command-line. We are also working on improving Blazor WebAssembly …
LiveSharp is a cross-platform hot-reload tool for .NET projects.
Brocade icx commands
Chris heria fight at restaurant video
Eskimo tent with stove
Intercompany billing journal entries
How to set swr on dual antennas

Измерение использования ЦП в ваших приложениях — Visual Studio

  • 7 минут на чтение

В этой статье

Найдите проблемы с производительностью во время отладки с помощью встроенного в отладчик средства диагностики CPU Usage , интегрированного в отладчик. Вы также можете анализировать использование ЦП без подключенного отладчика или настроив таргетинг на работающее приложение. Дополнительные сведения см. В разделе Запуск инструментов профилирования с отладчиком или без него.

Когда отладчик приостанавливает работу, инструмент Использование ЦП в окне «Инструменты диагностики» собирает информацию о функциях, которые выполняются в вашем приложении. Инструмент перечисляет функции, которые выполняли работу, и предоставляет график временной шкалы, который вы можете использовать, чтобы сосредоточиться на определенных сегментах сеанса выборки.

Важно

Средства диагностики, интегрированные в отладчик, поддерживаются для разработки .NET в Visual Studio, включая ASP.NET, ASP.NET Core, а также для разработки на языке C ++.Для запуска инструментов профилирования с отладчиком требуется Windows 8 или более поздняя версия (окно «Средства диагностики », «»).

В этом уроке вы:

  • Сбор данных об использовании ЦП
  • Анализировать данные об использовании ЦП

Если Использование ЦП не предоставляет необходимых данных, другие инструменты профилирования в профилировщике производительности предоставляют различную информацию, которая может быть вам полезна. Во многих случаях узкое место производительности вашего приложения может быть вызвано чем-то другим, кроме вашего процессора, например памятью, пользовательским интерфейсом рендеринга или временем сетевого запроса.

Шаг 1. Сбор данных профилирования

  1. Откройте проект, который вы хотите отладить, в Visual Studio и установите точку останова в своем приложении в той точке, где вы хотите проверить использование ЦП.

  2. Установите вторую точку останова в конце функции или области кода, которую вы хотите проанализировать.

    Установив две точки останова, вы можете ограничить сбор данных теми частями кода, которые вы хотите анализировать.

  3. Окно инструментов диагностики появляется автоматически, если вы не отключили его.Чтобы снова открыть окно, щелкните Отладка > Windows > Показать средства диагностики .

  4. Вы можете выбрать, отображать ли Использование ЦП , Использование памяти или и то, и другое, с помощью параметра Выбрать инструменты на панели инструментов. Если вы используете Visual Studio Enterprise, вы также можете включить или отключить IntelliTrace в Tools > Options > IntelliTrace .

    В основном мы будем рассматривать использование ЦП, поэтому убедитесь, что Использование ЦП включено (по умолчанию включено).

  5. Щелкните Отладка > Начать отладку (или Запустить на панели инструментов, или F5 ).

    Когда приложение завершит загрузку, появится сводка инструментов диагностики. Если вам нужно открыть окно, нажмите Отладка > Windows > Показать средства диагностики .

    Для получения дополнительной информации о событиях см. «Поиск и фильтрация» на вкладке «События» окна «Средства диагностики».

  6. Запустить сценарий, который приведет к срабатыванию первой точки останова.

  7. Пока отладчик приостановлен, включите сбор данных об использовании ЦП, а затем откройте вкладку Использование ЦП .

    Когда вы выбираете Записать профиль ЦП , Visual Studio начнет записывать ваши функции и время, необходимое для их выполнения. Вы можете просматривать эти собранные данные только тогда, когда ваше приложение остановлено в точке останова.

  8. Нажмите F5, чтобы запустить приложение до второй точки останова.

    Теперь у вас есть данные о производительности вашего приложения специально для той области кода, которая выполняется между двумя точками останова.

    Профилировщик начинает подготовку данных потока. Подождите, пока он закончится.

    Инструмент использования ЦП отображает отчет на вкладке Использование ЦП .

  9. Если вы хотите выбрать более конкретную область кода для анализа, выберите область на временной шкале ЦП (это должна быть область, в которой отображаются данные профилирования).

    На этом этапе вы можете начать анализ данных.

    Подсказка

    При попытке определить проблемы с производительностью выполните несколько измерений. Производительность, естественно, варьируется от запуска к запуску, и пути кода обычно выполняются медленнее при первом запуске из-за одноразовой работы по инициализации, такой как загрузка DLL, методы JIT-компиляции и инициализация кешей. Выполнив несколько измерений, вы получите лучшее представление о диапазоне и медиане отображаемой метрики, что позволит вам сравнить производительность в первый раз с производительностью в устойчивом состоянии области кода.

Шаг 2. Анализ данных об использовании ЦП

Мы рекомендуем начать анализ данных с изучения списка функций в разделе «Использование ЦП», определения функций, выполняющих большую часть работы, а затем более внимательного изучения каждой из них.

  1. В списке функций проверьте функции, которые выполняют больше всего работы.

    Подсказка

    Функции перечислены в порядке, начиная с тех, которые выполняют большую часть работы (они не в порядке вызовов).Это поможет вам быстро определить самые длительные функции.

  2. В списке функций дважды щелкните одну из функций вашего приложения, которая выполняет много работы.

    Если дважды щелкнуть функцию, на левой панели откроется представление Caller / Callee .

    В этом представлении выбранная функция отображается в заголовке и в поле Текущая функция (в данном примере GetNumber). Функция, которая вызвала текущую функцию, показана слева под заголовком Вызов функций , а любые функции, вызываемые текущей функцией, показаны в поле Вызываемые функции справа.(Вы можете выбрать любой из полей, чтобы изменить текущую функцию.)

    В этом представлении отображается общее время (мс) и процент от общего времени работы приложения, затраченного на выполнение функции.
    Тело функции также показывает общее количество времени (и процент времени), проведенное в теле функции, за исключением времени, затраченного на вызов и вызываемые функции. (В этом примере 2367 из 2389 мс были потрачены на тело функции, а оставшиеся 22 мс были потрачены на внешний код, вызываемый этой функцией).

    Подсказка

    Высокие значения в Теле функции могут указывать на узкое место производительности внутри самой функции.

  3. Чтобы просмотреть представление более высокого уровня, показывающее порядок, в котором вызываются функции, выберите Дерево вызовов из раскрывающегося списка в верхней части панели.

    Каждая пронумерованная область на рисунке относится к этапу процедуры.

    Изображение Описание
    Узел верхнего уровня в деревьях вызовов использования ЦП является псевдоузлом
    В большинстве приложений, когда параметр Показать внешний код отключен, узел второго уровня — это узел [Внешний код] , который содержит код системы и платформы, который запускает и останавливает приложение, рисует пользовательский интерфейс, управляет планированием потоков, и предоставляет приложению другие низкоуровневые сервисы.
    Дочерние элементы узла второго уровня — это методы пользовательского кода и асинхронные подпрограммы, которые вызываются или создаются системой второго уровня и кодом инфраструктуры.
    Дочерние узлы метода содержат данные только для вызовов родительского метода. Когда Показать внешний код отключен, методы приложения также могут содержать узел [Внешний код] .

    Дополнительная информация о значениях столбца:

    • Всего ЦП показывает, сколько работы было выполнено функцией и вызванными ею функциями.Высокие общие значения ЦП указывают на функции, которые в целом являются наиболее дорогостоящими.

    • Self CPU показывает, сколько работы было выполнено кодом в теле функции, исключая работу, выполненную функциями, которые были вызваны им. Высокие значения Self CPU могут указывать на снижение производительности внутри самой функции.

    • Модули Имя модуля, содержащего функцию, или количество модулей, содержащих функции, в узле [Внешний код].

    Чтобы увидеть в дереве вызовов вызовы функций, которые используют самый высокий процент использования ЦП, щелкните Expand Hot Path .

    Примечание

    Если вы видите код в дереве вызовов, помеченный как «сломанный» код или «непроходимый стек», это означает, что события трассировки событий для Windows (ETW), вероятно, были отброшены. Попробуйте собрать тот же след во второй раз, чтобы решить проблему.

Посмотреть внешний код

Внешний код — это функции в компонентах системы и фреймворка, которые выполняются написанным вами кодом.Внешний код включает функции, которые запускают и останавливают приложение, рисуют пользовательский интерфейс, управляют потоками и предоставляют другие низкоуровневые службы для приложения. В большинстве случаев вас не интересует внешний код, поэтому инструмент использования ЦП собирает внешние функции пользовательского метода в один узел [Внешний код] .

Если вы хотите просмотреть пути вызова внешнего кода, выберите Показать внешний код из списка Фильтр просмотра , а затем выберите Применить .

Имейте в виду, что многие цепочки вызовов внешнего кода глубоко вложены, поэтому ширина столбца «Имя функции» может превышать ширину отображения всех компьютерных мониторов, кроме самого большого. Когда это происходит, имена функций отображаются как […] .

Используйте поле поиска, чтобы найти узел, который вы ищете, затем используйте горизонтальную полосу прокрутки, чтобы отобразить данные.

Подсказка

Если вы профилируете внешний код, который вызывает функции Windows, вы должны убедиться, что у вас самая последняя версия. pdb файлов. Без этих файлов в представлениях отчетов будут перечислены загадочные и трудные для понимания имена функций Windows. Дополнительные сведения о том, как убедиться, что у вас есть нужные файлы, см. В разделе Указание символа (.pdb) и исходных файлов в отладчике.

Следующие шаги

Из этого руководства вы узнали, как собирать и анализировать данные об использовании ЦП. Если вы уже выполнили первый взгляд на инструменты профилирования, вы можете быстро узнать, как анализировать использование памяти в ваших приложениях.

Начало работы с инструментами профилирования — Visual Studio

  • Читать 12 минут

В этой статье

Visual Studio предоставляет различные инструменты профилирования, которые помогут вам диагностировать различные виды проблем с производительностью в зависимости от типа вашего приложения. В этой статье мы кратко рассмотрим наиболее распространенные инструменты профилирования.

Чтобы увидеть поддержку инструмента профилирования для различных типов приложений, см. Какой инструмент мне следует использовать?

Измерение производительности при отладке

Инструменты профилирования, к которым вы можете получить доступ во время сеанса отладки, доступны в окне «Инструменты диагностики». Окно «Средства диагностики» появляется автоматически, если оно не отключено. Чтобы открыть окно, щелкните Debug / Windows / Show Diagnostic Tools . В открытом окне вы можете выбрать инструменты, для которых хотите собирать данные.

Во время отладки можно использовать окно Средства диагностики для анализа использования ЦП и памяти, а также просматривать события, отображающие информацию, связанную с производительностью.

Окно инструментов диагностики Окно — это распространенный способ профилирования приложений, но для сборок Release вы также можете выполнить посмертный анализ вашего приложения. Дополнительные сведения о различных подходах см. В разделе Запуск инструментов профилирования с отладчиком или без него. Чтобы увидеть поддержку инструмента профилирования для различных типов приложений, см. Какой инструмент мне следует использовать?

Инструменты, доступные в окне «Инструменты диагностики» или во время сеанса отладки, включают:

Примечание

Для запуска инструментов профилирования с отладчиком требуется

Windows 8 или более поздняя версия (окно «Инструменты диагностики »).Вы можете использовать инструменты post mortem в Windows 7 и более поздних версиях.

Измерение производительности в сборках выпуска

Инструменты

в профилировщике производительности предназначены для анализа сборок выпуска . В профилировщике производительности вы можете собирать диагностическую информацию во время работы приложения, а затем изучать собранную информацию после остановки приложения (посмертный анализ).

Откройте профилировщик производительности, выбрав Отладка > Профилировщик производительности (или Alt + F2 ).

Для получения дополнительных сведений об использовании средства использования ЦП или использования памяти в профилировщике производительности по сравнению с инструментами, интегрированными в отладчик, см. Раздел «Запуск средств профилирования с отладчиком или без него».

Инструменты, доступные в профилировщике производительности, включают:

Чтобы увидеть поддержку инструмента профилирования для различных типов приложений, см. Какой инструмент мне следует использовать?

В некоторых сценариях окно позволяет выбрать несколько инструментов профилирования. Такие инструменты, как использование ЦП, могут предоставить дополнительные данные, которые можно использовать для анализа.Вы также можете использовать профилировщик командной строки для включения сценариев, включающих несколько инструментов профилирования.

Оцените производительность с помощью PerfTips

Часто самый простой способ просмотреть информацию о производительности — использовать PerfTips. Используя PerfTips, вы можете просматривать информацию о производительности во время взаимодействия с вашим кодом. Вы можете проверить такую ​​информацию, как продолжительность события (измеренная с момента последней приостановки отладчика или запуска приложения). Например, если вы пошагово выполняете код (F10, F11), PerfTips покажет вам продолжительность выполнения приложения от предыдущей шаговой операции до текущего шага.

Вы можете использовать PerfTips, чтобы проверить, сколько времени требуется для выполнения блока кода или сколько времени требуется для выполнения отдельной функции.

PerfTips показывают те же события, которые также отображаются в представлении События средств диагностики. В представлении Events вы можете просматривать различные события, которые происходят во время отладки, такие как установка точки останова или операция пошагового выполнения кода.

Анализировать использование ЦП

Инструмент использования ЦП — хорошее место для начала анализа производительности вашего приложения.Он расскажет вам больше о ресурсах ЦП, которые потребляет ваше приложение. Вы можете использовать интегрированный в отладчик инструмент CPU Usage или посмертный инструмент CPU Usage.

При использовании встроенного в отладчик средства использования ЦП откройте окно средства диагностики (если оно закрыто, выберите Отладка / Windows / Показать средства диагностики ). Во время отладки откройте представление Summary и выберите Record CPU Profile .

Один из способов использования этого инструмента — установить две точки останова в вашем коде, одну в начале и одну в конце функции или области кода, которую вы хотите проанализировать.Изучите данные профилирования, когда вы остановились на второй точке останова.

Представление Использование ЦП показывает список функций, отсортированных по самому продолжительному времени выполнения, причем самая продолжительная функция находится вверху. Это может помочь вам найти функции, в которых возникают узкие места в производительности.

Дважды щелкните на интересующей вас функции, и вы увидите более подробное трехпанельное представление «бабочка» с выбранной функцией в середине окна, вызывающей функцией слева и вызываемыми функциями на право.Раздел Function Body показывает общее количество времени (и процент времени), проведенное в теле функции, за исключением времени, затраченного на вызов и вызываемые функции. Эти данные могут помочь вам оценить, является ли сама функция узким местом производительности.

Анализировать использование памяти

Окно инструментов диагностики также позволяет оценить использование памяти в приложении с помощью инструмента Использование памяти . Например, вы можете посмотреть количество и размер объектов в куче.Вы можете использовать интегрированный в отладчик инструмент использования памяти или посмертный инструмент использования памяти в профилировщике производительности.

Разработчики

.NET могут выбирать между средством распределения объектов .NET или средством использования памяти.

  • Инструмент .NET Object Allocation помогает выявлять шаблоны распределения и аномалии в вашем .NET-коде, а также помогает выявлять общие проблемы со сборкой мусора. Этот инструмент работает только как инструмент вскрытия. Вы можете запустить этот инструмент на локальных или удаленных машинах.
  • Утилита Использование памяти Инструмент помогает выявлять утечки памяти, которые обычно не характерны для приложений .NET. Если вам нужно использовать функции отладчика при проверке памяти, например, пошаговое выполнение кода, рекомендуется использовать встроенный в отладчик инструмент использования памяти.

Для анализа использования памяти с помощью инструмента Использование памяти необходимо сделать хотя бы один моментальный снимок памяти. Часто лучший способ проанализировать память — это сделать два снимка; первый — прямо перед предполагаемой проблемой памяти, а второй моментальный снимок — сразу после того, как возникла подозрительная проблема с памятью.Затем вы можете просмотреть разницу между двумя снимками и увидеть, что именно изменилось. На следующем рисунке показано создание снимка с помощью встроенного в отладчик инструмента.

Когда вы выбираете одну из ссылок со стрелками, вам предоставляется дифференциальное представление кучи (красная стрелка вверх показывает увеличивающееся количество объектов (слева) или увеличивающийся размер кучи (справа)). Если щелкнуть правую ссылку, вы получите дифференциальное представление кучи, упорядоченное по объектам, размер кучи которых увеличился больше всего. Это может помочь вам определить проблемы с памятью.Например, на рисунке ниже байты, используемые объектами ClassHandlersStore , увеличились на 3 492 байта во втором снимке.

Если вы щелкните ссылку слева вместо представления Использование памяти , представление кучи будет организовано по количеству объектов; объекты определенного типа, число которых увеличилось больше всего, показаны вверху (отсортированы по столбцу Count Diff ).

Анализировать потребление ресурсов (XAML)

В приложениях XAML, таких как классические приложения WPF для Windows и приложения UWP, вы можете анализировать потребление ресурсов с помощью инструмента временной шкалы приложения.Например, вы можете анализировать время, затрачиваемое вашим приложением на подготовку кадров пользовательского интерфейса (макет и рендеринг), обслуживание сетевых и дисковых запросов, а также в таких сценариях, как запуск приложения, загрузка страницы и изменение размера окна. Чтобы использовать этот инструмент, выберите Application Timeline в профилировщике производительности, а затем выберите Start . В своем приложении просмотрите сценарий с предполагаемой проблемой потребления ресурсов, а затем выберите Остановить сбор , чтобы сгенерировать отчет.

Низкая частота кадров на графике Визуальная пропускная способность может соответствовать визуальным проблемам, которые вы видите при запуске приложения.Точно так же большие числа на графике использования потока пользовательского интерфейса могут также соответствовать проблемам с откликом пользовательского интерфейса. В отчете вы можете выбрать период времени с предполагаемой проблемой производительности, а затем изучить подробные действия потока пользовательского интерфейса в подробном представлении временной шкалы (нижняя панель).

В подробном представлении временной шкалы вы можете найти такую ​​информацию, как тип действия (или задействованный элемент пользовательского интерфейса), а также продолжительность действия. Например, на иллюстрации событие Layout для элемента управления Grid занимает 57.53 мс.

Для получения дополнительной информации см. Временную шкалу приложения.

Изучить события приложения

Общая программа просмотра событий позволяет вам просматривать активность вашего приложения через список событий, таких как загрузка модуля, запуск потока и конфигурации системы, чтобы помочь лучше диагностировать работу вашего приложения прямо в профилировщике Visual Studio. Этот инструмент доступен в профилировщике производительности. Откройте профилировщик производительности, выбрав Отладка > Профилировщик производительности (или Alt + F2 ).

Инструмент показывает каждое событие в виде списка. Столбцы предоставляют информацию о каждом событии, такую ​​как имя события, метка времени и идентификатор процесса.

Анализировать асинхронный код (.NET)

.NET Async Tool позволяет анализировать производительность асинхронного кода в вашем приложении. Этот инструмент доступен в профилировщике производительности. Откройте профилировщик производительности, выбрав Отладка > Профилировщик производительности (или Alt + F2 ).

Инструмент показывает каждую асинхронную операцию в виде списка. Вы можете видеть такую ​​информацию, как время начала, время окончания и общее время для асинхронной операции.

Анализировать производительность базы данных (.NET Core)

Для приложений .NET Core, использующих ADO.NET или Entity Framework Core, средство базы данных позволяет записывать запросы к базе данных, которые ваше приложение делает во время сеанса диагностики. Затем вы можете анализировать информацию об отдельных запросах, чтобы найти места, где можно улучшить производительность вашего приложения.Этот инструмент доступен в профилировщике производительности. Откройте профилировщик производительности, выбрав Отладка > Профилировщик производительности (или Alt + F2 ).

Инструмент показывает каждый запрос в виде списка. Вы можете увидеть такую ​​информацию, как время начала и продолжительность запроса.

Изучите события производительности и доступности пользовательского интерфейса (UWP)

В своих приложениях UWP вы можете включить UI Analysis в окне Средства диагностики .Инструмент ищет распространенные проблемы производительности или доступности и отображает их в представлении События во время отладки. Описания событий содержат информацию, которая может помочь в решении проблем.

Анализ использования графического процессора (Direct3D)

В приложениях Direct3D (компоненты Direct3D должны быть на C ++) вы можете проверять активность графического процессора и анализировать проблемы с производительностью. Для получения дополнительной информации см. Использование графического процессора. Чтобы использовать этот инструмент, выберите Использование графического процессора в профилировщике производительности, а затем выберите Start .В своем приложении просмотрите сценарий, который вас интересует, а затем выберите Остановить сбор , чтобы сгенерировать отчет.

Когда вы выбираете период времени на графиках и выбираете просмотреть подробности , подробное представление появляется на нижней панели. В подробном представлении вы можете проверить, сколько активности происходит на каждом процессоре и графическом процессоре. Выберите события на самой нижней панели, чтобы отобразить всплывающие окна на временной шкале. Например, выберите событие Присутствует , чтобы просмотреть всплывающие окна вызова Присутствует .(Светло-серые вертикальные линии VSync можно использовать в качестве справки, чтобы понять, пропустили ли определенные вызовы Present VSync. Между каждыми двумя VSync должен быть один вызов Present , чтобы приложение стабильно достигало 60 кадров в секунду.)

Вы также можете использовать графики, чтобы определить, есть ли узкие места в производительности, связанные с процессором или графическим процессором.

Анализ производительности (JavaScript UWP)

Для приложений UWP можно использовать инструмент памяти JavaScript и инструмент реагирования пользовательского интерфейса HTML.

Инструмент памяти JavaScript похож на инструмент использования памяти, доступный для других типов приложений. Вы можете использовать этот инструмент, чтобы понять использование памяти и найти утечки памяти в вашем приложении. Дополнительные сведения об инструменте см. В разделе Память JavaScript.

Чтобы диагностировать отзывчивость пользовательского интерфейса, медленное время загрузки и медленные визуальные обновления в приложениях UWP, используйте инструмент HTML UI Responsiveness. Использование аналогично инструменту «Временная шкала приложения» для других типов приложений. Дополнительные сведения см. В разделе «Отзывчивость пользовательского интерфейса HTML».

Анализ использования сети (UWP)

В приложениях UWP вы можете анализировать сетевые операции, выполняемые с помощью API Windows.Web.Http . Этот инструмент может помочь вам решить такие проблемы, как проблемы с доступом и аутентификацией, неправильное использование кеша и низкая производительность отображения и загрузки. Чтобы использовать этот инструмент, выберите Network в профилировщике производительности, а затем выберите Start . В своем приложении просмотрите сценарий, в котором используется Windows.Web.Http , а затем выберите Остановить сбор , чтобы создать отчет.

Выберите операцию в сводном представлении, чтобы просмотреть дополнительные сведения.

Для получения дополнительной информации см. Использование сети.

Если вам нужны такие функции, как инструментарий, которые в настоящее время отсутствуют в инструментах использования ЦП или использования памяти, и вы используете настольные приложения или приложения ASP.NET, вы можете использовать Performance Explorer для профилирования. (Не поддерживается в приложениях UWP). Для получения дополнительной информации см. Обозреватель производительности.

В Visual Studio 2019 устаревший обозреватель производительности и связанные с ним инструменты профилирования, такие как мастер производительности, были включены в профилировщик производительности, который можно открыть с помощью Debug > Performance Profiler . В профилировщике производительности доступные инструменты диагностики зависят от выбранной цели и текущего открытого запускаемого проекта. Средство использования ЦП обеспечивает возможность выборки, ранее поддерживаемую мастером производительности. Инструмент Instrumentation предоставляет инструментальные возможности профилирования (для точного подсчета и продолжительности вызовов), которые были в мастере производительности.Дополнительные инструменты памяти также появляются в профилировщике производительности.

Вот таблица, в которой перечислены различные инструменты, предлагаемые Visual Studio, и различные типы проектов, с которыми вы можете их использовать:

См. Также

Запуск инструментов профилирования с отладчиком или без него — Visual Studio

  • 4 минуты на чтение

В этой статье

Visual Studio предлагает широкий выбор инструментов для измерения производительности и профилирования.Некоторые инструменты, такие как «Использование ЦП» и «Использование памяти», могут работать с отладчиком или без него, а также при выпуске или отладке конфигураций сборки. Инструменты, которые появляются в окне «Инструменты диагностики», работают только во время сеанса отладки. Инструменты, которые появляются в профилировщике производительности, запускаются без отладчика, и вы анализируете результаты после того, как решите остановиться и собрать данные (для посмертного анализа).

Примечание

Вы можете использовать инструменты повышения производительности без отладчика в Windows 7 и более поздних версиях. Для запуска инструментов профилирования, интегрированных в отладчик, требуется Windows 8 или более поздняя версия.

Профилировщик производительности без отладчика и диагностические инструменты, интегрированные в отладчик, предоставляют различную информацию и возможности. Инструменты, интегрированные в отладчик, показывают значения переменных и позволяют использовать точки останова. Инструменты без отладчика дают вам результаты, близкие к опыту конечного пользователя.

Чтобы решить, какие инструменты и результаты использовать, примите во внимание следующее:

  • Инструмент, интегрированный в отладчик, и инструмент без отладчика
    • Внешние проблемы с производительностью, такие как файловый ввод-вывод или проблемы с откликом сети, не будут сильно отличаться в отладчике или в инструментах, не относящихся к отладчику.
    • Сам отладчик изменяет время производительности, поскольку он выполняет необходимые операции отладчика, такие как перехват исключения и событий загрузки модуля.
    • Показатели производительности сборки выпуска

    • в профилировщике производительности являются наиболее точными и точными. Результаты инструмента, интегрированного с отладчиком, наиболее полезны для сравнения с другими измерениями, связанными с отладкой, или для использования функций отладчика.
    • Некоторые инструменты, такие как инструмент .NET Object Allocation, доступны только для сценариев, не связанных с отладкой.
  • Отладка и сборка выпуска
    • Для проблем, вызванных вызовами, интенсивно использующими ЦП, между выпуском и отладочной сборкой могут быть значительные различия в производительности. Проверьте, существует ли проблема в сборках выпуска.
    • Если проблема возникает только во время отладочных сборок, вам, вероятно, не нужно запускать инструменты, не относящиеся к отладчику. В случае проблем с выпуском сборки решите, помогут ли функции, предоставляемые инструментами, интегрированными с отладчиком, выявить проблему.
    • Сборки

    • Release обеспечивают такие оптимизации, как встраивание вызовов функций и констант, удаление неиспользуемых путей кода и хранение переменных способами, которые не могут быть использованы отладчиком.Показатели производительности в отладочных сборках менее точны, поскольку в отладочных сборках отсутствует такая оптимизация.

Сбор данных профилирования во время отладки

Когда вы начинаете отладку в Visual Studio, выбирая Отладка > Начать отладку или нажимая F5 , по умолчанию открывается окно Средства диагностики . Чтобы открыть его вручную, выберите Отладка > Windows > Показать средства диагностики .Окно инструментов диагностики показывает информацию о событиях, памяти процесса и использовании ЦП.

  • Используйте значок Настройки на панели инструментов, чтобы выбрать, следует ли просматривать Использование памяти , Анализ пользовательского интерфейса и Использование ЦП .

  • Выберите Параметры в раскрывающемся списке Параметры , чтобы открыть страницы свойств средств диагностики с дополнительными параметрами.

  • Если вы используете Visual Studio Enterprise, вы можете включить или отключить IntelliTrace, перейдя в Инструменты > Параметры > IntelliTrace .

Сеанс диагностики завершается, когда вы прекращаете отладку.

Для получения дополнительной информации см .:

Вкладка События

Во время сеанса отладки на вкладке «События» окна «Средства диагностики» перечислены возникающие диагностические события. Префиксы категорий Breakpoint , File и другие позволяют быстро сканировать список на предмет категории или пропускать категории, которые вам не нужны.

Используйте раскрывающийся список Фильтр для фильтрации событий в поле зрения и вне его, выбирая или очищая определенные категории событий.

Используйте поле поиска, чтобы найти конкретную строку в списке событий. Вот результаты поиска строки name , которая соответствует четырем событиям:

Для получения дополнительной информации см. «Поиск и фильтрация» на вкладке «События» окна «Средства диагностики».

Сбор данных профилирования без отладки

Для сбора данных о производительности без отладки можно запустить инструменты профилировщика производительности.

  1. Открыв проект в Visual Studio, задайте для конфигурации решения значение Release и выберите Local Windows Debugger (или Local Machine ) в качестве цели развертывания.

  2. Выберите Debug > Performance Profiler или нажмите Alt + F2 .

  3. На странице запуска средств диагностики выберите один или несколько инструментов для запуска. Показаны только инструменты, применимые к типу проекта, операционной системе и языку программирования. Выберите Показать все инструменты , чтобы также увидеть инструменты, отключенные для этого диагностического сеанса.

  4. Чтобы начать диагностический сеанс, выберите Start .

    Во время сеанса некоторые инструменты показывают графики данных в реальном времени на странице инструментов диагностики, а также элементы управления для приостановки и возобновления сбора данных.

  5. Чтобы завершить диагностический сеанс, выберите Остановить сбор .

    Проанализированные данные появятся на странице отчета .

Вы можете сохранять отчеты и открывать их из списка Недавно открытые сеансы на странице запуска средств диагностики.

Для получения дополнительной информации см .:

Сбор данных профилирования из командной строки

Для измерения данных о производительности из командной строки можно использовать VSDiagnostics.exe, который входит в состав Visual Studio или Remote Tools. Это полезно для записи трассировок производительности в системах, где Visual Studio не установлена, или для создания сценариев для сбора трассировок производительности. Подробные инструкции см. В разделе Измерение производительности приложения из командной строки.

NVIDIA Visual Profiler | NVIDIA Developer

NVIDIA Visual Profiler — это кроссплатформенный инструмент профилирования производительности, который предоставляет разработчикам важную обратную связь для оптимизации приложений CUDA C / C ++. Впервые представленный в 2008 году, Visual Profiler поддерживает все более 350 миллионов графических процессоров NVIDIA с поддержкой CUDA, поставляемых с 2006 года для Linux, Mac OS X и Windows. NVIDIA Visual Profiler доступен как часть CUDA Toolkit.

Обратите внимание, что NVIDIA® CUDA Toolkit 11.0 (и более поздние версии) больше не поддерживает разработку или запуск приложений в macOS. Хотя нет инструментов, которые используют macOS в качестве целевой среды, NVIDIA делает доступной версию Visual Profiler для macOS, из которой вы можете запускать сеансы профилирования на поддерживаемых целевых платформах. Вы можете загрузить этот и другие инструменты для macOS, нажав кнопку ниже.

(Нажмите, чтобы увеличить)

(Нажмите, чтобы увеличить)

Обзор

  • Сосредоточьтесь на важной информации
    Быстро выявляйте потенциальные проблемы с производительностью в ваших приложениях с помощью настраиваемых таблиц и графических представлений
  • Автоматический анализ производительности
    Выполните автоматический анализ вашего приложения для выявления узких мест производительности и получения предложений по оптимизации, которые можно использовать для повышения производительности
  • Унифицированная шкала времени ЦП и ГП
    Просматривайте активность CUDA, происходящую как на ЦП, так и на графическом процессоре, в единую шкалу времени, включая вызовы API CUDA, передачи памяти и запуски CUDA.
  • CUDA API trace
    Просмотр всех передач памяти, запусков ядра и других функций API на одной временной шкале
  • Переход к необработанным данным
    Получите низкоуровневую аналитическую информацию, изучая показатели производительности, собранные непосредственно с аппаратных счетчиков графического процессора и программных инструментов.
  • Сравнить результаты нескольких сеансов
    Подтвердить улучшение производительности путем сравнения с предыдущими сеансами
  • Анализировать данные, собранные из удаленных систем
    Используйте профилировщик командной строки с использованием переменных среды для сбора данных из нескольких систем и анализа результатов в Visual Profiler
  • CUDA Dynamic Parallelism
    Просмотр временной шкалы для приложений, использующих динамический параллелизм CUDA, включая ядра, запускаемые как хостом, так и устройства, а также отношения родитель-потомок между ядрами.
  • Управляемый анализ приложений
    Используйте режим управляемого анализа, чтобы получать пошаговые инструкции по анализу и оптимизации. Результаты анализа теперь включают графическую визуализацию, чтобы более четко указать возможности оптимизации.
  • Профилирование мощности, температуры и тактовой частоты
    Наблюдать за изменением значений мощности, температуры и тактовой частоты графического процессора во время выполнения приложения

Последняя версия Visual Profiler с поддержкой обоих приложений CUDA C / C ++ доступна с CUDA Toolkit и поддерживается на всех платформах, поддерживаемых CUDA Toolkit.

Разработчики должны обязательно проверить NVIDIA Nsight Systems для нашего инструмента профилирования нового поколения с поддержкой Linux, Windows, macOS, PowerPC и Arm. Обязательно ознакомьтесь с нашими рекомендациями по переносу инструментов, чтобы упростить переход.

Для разработки и отладки в Windows см. Интеграция Nsight Visual Studio Edition и NVIDIA Nsight Systems Visual Studio с интеграцией NVIDIA Nsight.

Для получения дополнительной информации о Visual Profiler и других инструментах разработки CUDA:

Есть вопросы по инструментам CUDA?

Если у вас возникнут трудности с использованием любого из инструментов CUDA или возникнут дополнительные вопросы, свяжитесь с командой разработчиков инструментов NVIDIA по адресу (cudatools @ nvidia.com).

11 Инструменты для профилирования кода и повышения производительности для Visual Studio — Журнал Visual Studio

Набор инструментов Visual Studio

11 Инструменты профилирования кода и производительности для Visual Studio

Оптимизация производительности может быть корнем всех зол, но эти инструменты упрощают процесс достижения максимальной производительности из вашего кода.

  • Терренс Дорси
  • 10.07.2015

Оптимизация производительности при разработке программного обеспечения может быть проблемой, которая сильно поляризует программистов.С одной стороны, известно, что слишком большое внимание к настройке производительности кроличьих нор приводит к отклонению программных проектов от курса и графика. С другой стороны, небольшие проблемы, воспроизводимые в больших системах, могут стать узкими местами … или даже хуже.

Добавьте к этим противоречивым возможностям тот факт, что многие инженеры-программисты, которых я знаю, считают, что сирену о решении тонкой проблемы трудно устоять. Баланс между необходимостью отгрузки и ценностью получения большей стабильности и эффективности — это постоянное напряжение.

К счастью, есть несколько отличных инструментов, которые избавляют от утомительной работы и догадок при профилировании и тестировании производительности вашего кода.

Еще в июльском выпуске журнала MSDN Magazine за июль 2011 г. я составил обзор некоторых довольно удивительных «Инструментов и методов для профилирования кода .NET». Прошло четыре года. Как вы увидите, инструменты стали лучше, и их стало еще больше.

AMD CodeXL
Анализатор производительности AMD CodeAnalyst, о котором я рассказывал еще в 2011 году, теперь заменен новым и расширенным пакетом отладки и профилирования AMD CodeXL.Как и прежде, он направлен на настройку кода для процессоров AMD, графических процессоров и APU и обеспечивает профилирование графических процессоров и процессоров, а также статический анализ ядра OpenCL.

AMD предоставляет автономные профилировщики CodeXL для Windows 7, Windows 8 и Linux. Также существует расширение AMD CodeXL для Visual Studio 2010, 2012 и 2013, которое интегрирует возможности отладки и профилирования GPU и APU прямо в вашу среду разработки. Также доступно старое расширение AMD CodeAnalyst Performance Analyzer.

JetBrains dotTrace
JetBrains dotTrace прошла долгий путь за последние четыре года и теперь включает в себя полный набор инструментов для отслеживания выполнения кода и анализа производительности. Вы по-прежнему можете запускать трассировку, выборку или построчный анализ как в локальных, так и в удаленных системах. dotTrace поддерживает Microsoft .NET Framework до версии 4.5.2, автономные настольные приложения Silverlight 4 или 5, веб-приложения, службы Windows Communication Foundation (WCF) и многое другое.Новые функции включают профилирование временной шкалы и профилирование запросов SQL.

Обратите внимание, что альтернативное расположение для загрузки на странице галереи Visual Studio расширения dotTrace обеспечивает действительно четкий и краткий обзор продукта. Начните там, если вам интересно, а затем перейдите на сайт JetBrains, если вы решите скачать или купить.

JetBrains в настоящее время предлагает ограниченную по времени бесплатную пробную версию и ряд вариантов лицензирования, включая полнофункциональный пакет ReSharper Ultimate, который включает ReSharper, dotCover, dotTrace, dotMemory, а также ReSharper C ++, все в одной лицензии, для значительной скидка.

RedGate ANTS
Red Gate ANTS Performance Profiler и ANTS Memory Profiler — еще один набор коммерческих инструментов, которые профилируют исполняемые файлы .NET, приложения ASP.NET и веб-службы в IIS, IIS Express и Web Development Server, коллекциях SharePoint 2007 или 2010, Silverlight приложения, службы Windows и приложения COM +.

ANTS Performance Profiler (, рис. 1, ) позволяет анализировать любую базу кода, поддерживаемую .NET, а также профилирование HTTP-запросов, ввод-вывод хранилища и профилирование доступа к данным с поддержкой SQL Server, Oracle, MySQL, MariaDB и PostgreSQL. .

[Щелкните изображение, чтобы увеличить.]
Рисунок 1. Профилировщик производительности Red Gate ANTS

ANTS Memory Profiler позволяет делать снимки использования памяти в ваших .NET-приложениях, маршруты сборки мусора, неуправляемое использование памяти и многое другое.

Оба инструмента поддерживают .NET Framework 1.1 — .NET Framework 4.5, любой язык, поддерживаемый .NET Framework и Visual Studio 2005, 2008, 2010, 2012 и 2013. Пробные версии и цены см. На сайте Red Gate. Существует также бесплатное расширение надстройки ANTS Profiler для Visual Studio, которое позволяет получить доступ к профилировщику производительности и профилировщику памяти непосредственно из Visual Studio.Работает как с пробными, так и с лицензионными версиями приложений.

Telerik JustTrace
В 2013 году Telerik приобрела EQATEC и, таким образом, EQATEC Profiler, о котором я упоминал в статье MSDN Magazine , теперь является частью Telerik JustTrace .NET для профилирования памяти и производительности. JustTrace предлагает два режима профилирования производительности: профилировщик выборки для облегченного анализа и профилировщик трассировки, который собирает события среды CLR для более интенсивного анализа. Он также включает профилирование памяти для записи.Снимки выделения экземпляров .NET.

JustTrace интегрируется с Visual Studio 2013, 2012, 2010 и 2008, а также работает как автономный профилировщик. Telerik предлагает 30-дневную пробную версию и лицензирование для каждого разработчика, а JustTrace также доступен как часть набора инструментов DevCraft.

Центр производительности и диагностики Visual Studio
Не забывайте, что прямо в Visual Studio встроены отличные инструменты для профилирования и отладки, которые теперь сгруппированы вместе в Центре производительности и диагностики в Visual Studio 2013, как это было представлено в этом сообщении блога Дэном из Microsoft. Тейлор и видео Channel 9 с Робертом Грином и Эндрю Холлом.

Центр производительности и диагностики включает знакомый Visual Studio Profiler, а также некоторые новые инструменты, включая анализ памяти JavaScript, отзывчивость пользовательского интерфейса HTML и отзывчивость пользовательского интерфейса XAML для приложений Магазина Windows, энергопотребление, использование ЦП и использование памяти. Кроме того, были обновлены и включены в новый хаб мастер настройки времени и производительности функций JavaScript из Visual Studio 2012. Поскольку все эти инструменты теперь доступны через концентратор, вы можете запустить несколько инструментов вместе в одном сеансе профилирования с комбинированными и взаимно коррелированными результатами.

Вы по-прежнему можете запускать инструменты анализа со страницы производительности и диагностики в Visual Studio 2015, и те же инструменты перенесены из Visual Studio 2013. В Visual Studio 2015 есть некоторые улучшения отладки и диагностики, включая поддержку кроссплатформенной отладки для JavaScript- проекты на основе Apache Cordova, а также проекты Xamarin и Android на основе C #.

Другие улучшения включают в себя возможность пошагово перебирать лямбда-выражения в окнах Watch, Visual Studio Remote Tools для запуска, отладки и тестирования приложения, работающего на другом компьютере, встроенную диагностику сети для данных трафика HTTP, PerfTips: Информация о производительности на- быстрый взгляд на отладку с помощью Visual Studio и многое другое.

Многие из этих новых инструментов собраны вместе в мощном окне отладчика средств диагностики в Visual Studio 2015 (см. , рис. 2, ), которое объединяет окно вывода, исторические данные IntelliTrace и инструменты из концентратора «Производительность и диагностика».

[Щелкните изображение, чтобы увеличить.]
Рисунок 2. Анализ истории производительности PerfTips, часть средств диагностики в Visual Studio 2015

В общем, это довольно приятная установка прямо из коробки.Но подождите … это еще не все.

Дополнительные инструменты для повышения производительности
Существует множество других специализированных инструментов для профилирования и повышения эффективности кода, многие из которых разработаны для сообщества вашими коллегами-программистами и доступны бесплатно.

Расширение Clr Heap Allocation Analyzer — это основанный на Roslyn диагностический анализатор распределения кучи C # для просмотра явных выделений, распределения боксов, захватов замыканий и т. Д. Вы можете запустить анализатор как отдельное приложение или как инструмент поддержки кода в Visual Studio.

Visual Leak Detector для Visual C ++ — это система обнаружения утечек памяти с открытым исходным кодом для Visual C ++, которая работает с отладчиком Visual Studio. Первоначально разработанный Дэном Молдингом, сейчас проект поддерживает Аркадий Шапкин.

Расширение ORM Profiler Франса Баумы (, рис. 3, ) дает вам возможность в реальном времени анализировать код доступа к данным Entity Framework, находить проблемы с производительностью и быстро узнавать, как их исправить. Он поддерживает режимы профилирования в интерактивном, автономном и производственном режиме и позволяет напрямую переходить от результатов профилирования к соответствующему коду в вашем проекте.

[Щелкните изображение, чтобы увеличить.]
Рисунок 3. Настройка доступа к данным Entity Framework с помощью профилировщика ORM

Не забудьте проверить и оптимизировать статические активы в своих проектах. Расширение Image Optimizer Мадса Кристенсена добавляет контекстное меню к любой папке и изображению в обозревателе решений, что позволяет автоматически оптимизировать все файлы PNG, GIF и JPEG в этой папке.

Наконец, что-то новое в конвейере: Xamarin Profiler находится в предварительной версии и предоставит инструменты профилирования, которые работают во всех ваших мобильных приложениях C #.Поскольку мы переходим к печати, предварительная версия Xamarin Profiler 0.16 только что была выпущена, поэтому следите за последними новостями разработки в блоге и форумах Xamarin.

Лучше, сильнее, быстрее
Это лишь часть инструментов профилирования, доступных сегодня. Существует множество других инструментов для профилирования и оптимизации производительности, ориентированных на конкретные детали реализации конкретных языков и фреймворков. Попробуйте и дайте нам знать, какие профилировщики вам нравятся больше всего, чтобы мы могли включить их в будущие колонки.

Об авторе


Терренс Дорси — технический писатель, редактор и стратег по контенту, специализирующийся на технологиях и разработке программного обеспечения. Последние 25 с лишним лет он работал над проектами, ориентированными на разработчиков, в ESPN, The Code Project и Microsoft. Прочтите его блог на http://terrencedorsey.com или подпишитесь на @tpdorsey в Twitter.

visualstudio-docs / руководство для начинающих по профилированию производительности.md at master · MicrosoftDocs / visualstudio-docs · GitHub

title описание мс по индивидуальному заказу мс. Дата мс тема f1_keywords helpviewer_keywords ms.assetid автор гс. Автор менеджер мс рабочая нагрузка

Измерение использования ЦП в ваших приложениях

Анализируйте проблемы производительности ЦП в вашем приложении с помощью встроенных в отладчик средств диагностики.

seodec18

03.04.2019

учебник

vs.performance.wizard.intropage

Инструменты для профилирования, быстрый запуск

Средства диагностики, использование ЦП

Использование ЦП

Инструменты диагностики

da2fbf8a-2d41-4654-a509-dd238532d25a

Майкджо5000

Микехо

jmartens

Найдите проблемы с производительностью во время отладки с помощью встроенного в отладчик средства диагностики CPU Usage , интегрированного в отладчик.Вы также можете анализировать использование ЦП без подключенного отладчика или настроив таргетинг на работающее приложение. Дополнительные сведения см. В разделе Запуск инструментов профилирования с отладчиком или без него.

Когда отладчик приостанавливает работу, инструмент Использование ЦП в окне «Инструменты диагностики» собирает информацию о функциях, которые выполняются в вашем приложении. Инструмент перечисляет функции, которые выполняли работу, и предоставляет график временной шкалы, который вы можете использовать, чтобы сосредоточиться на определенных сегментах сеанса выборки.

[! Важно]
Инструменты диагностики, интегрированные в отладчик, поддерживаются для разработки .NET в Visual Studio, включая ASP.NET, ASP.NET Core, а также для разработки на языке C ++. Для запуска инструментов профилирования с отладчиком требуется Windows 8 или более поздняя версия (окно «Средства диагностики », «»).

В этом уроке вы:

[! Div]

  • Сбор данных об использовании ЦП
  • Анализировать данные об использовании ЦП

Если Использование ЦП не предоставляет необходимых данных, другие инструменты профилирования в профилировщике производительности предоставляют различную информацию, которая может быть вам полезна.Во многих случаях узкое место производительности вашего приложения может быть вызвано чем-то другим, кроме вашего процессора, например памятью, пользовательским интерфейсом рендеринга или временем сетевого запроса.

Шаг 1. Сбор данных профилирования

  1. Откройте проект, который вы хотите отладить, в Visual Studio и установите точку останова в своем приложении в той точке, где вы хотите проверить использование ЦП.

  2. Установите вторую точку останова в конце функции или области кода, которую вы хотите проанализировать.

    Установив две точки останова, вы можете ограничить сбор данных теми частями кода, которые вы хотите анализировать.

  3. Окно инструментов диагностики появляется автоматически, если вы не отключили его. Чтобы снова открыть окно, щелкните Отладка > Windows > Показать средства диагностики .

  4. Вы можете выбрать, отображать ли Использование ЦП , Использование памяти или и то, и другое, с помощью параметра Выбрать инструменты на панели инструментов. Если вы используете Visual Studio Enterprise, вы также можете включить или отключить IntelliTrace в Tools > Options > IntelliTrace .

    В основном мы будем рассматривать использование ЦП, поэтому убедитесь, что Использование ЦП включено (по умолчанию включено).

  5. Щелкните Отладка > Начать отладку (или Запустить на панели инструментов, или F5 ).

    Когда приложение завершит загрузку, появится сводка инструментов диагностики. Если вам нужно открыть окно, нажмите Отладка > Windows > Показать средства диагностики .

    Для получения дополнительной информации о событиях см. «Поиск и фильтрация» на вкладке «События» окна «Средства диагностики».

  6. Запустите сценарий, который приведет к срабатыванию первой точки останова.

  7. Пока отладчик приостановлен, включите сбор данных об использовании ЦП, а затем откройте вкладку Использование ЦП .

    Когда вы выбираете Записать профиль ЦП , Visual Studio начнет записывать ваши функции и время, необходимое для их выполнения.Вы можете просматривать эти собранные данные только тогда, когда ваше приложение остановлено в точке останова.

  8. Нажмите F5, чтобы запустить приложение до второй точки останова.

    Теперь у вас есть данные о производительности вашего приложения специально для той области кода, которая выполняется между двумя точками останова.

    Профилировщик начинает подготовку данных потока. Подождите, пока он закончится.

    Инструмент использования ЦП отображает отчет на вкладке Использование ЦП .

  9. Если вы хотите выбрать более конкретную область кода для анализа, выберите область на временной шкале ЦП (это должна быть область, в которой отображаются данные профилирования).

    На этом этапе вы можете начать анализ данных.

    [! СОВЕТ]
    При попытке определить проблемы с производительностью выполните несколько измерений. Производительность, естественно, варьируется от запуска к запуску, и пути кода обычно выполняются медленнее при первом запуске из-за одноразовой работы по инициализации, такой как загрузка DLL, методы JIT-компиляции и инициализация кешей. Выполнив несколько измерений, вы получите лучшее представление о диапазоне и медиане отображаемой метрики, что позволит вам сравнить производительность в первый раз с производительностью в устойчивом состоянии области кода.

Шаг 2. Анализ данных об использовании ЦП

Мы рекомендуем начать анализ данных с изучения списка функций в разделе «Использование ЦП», определения функций, выполняющих большую часть работы, а затем более внимательного изучения каждой из них.

  1. В списке функций проверьте функции, выполняющие наибольшую часть работы.

    [! СОВЕТ]
    Функции перечислены в порядке, начиная с тех, которые выполняют большую часть работы (они не в порядке вызовов).Это поможет вам быстро определить самые длительные функции.

  2. В списке функций дважды щелкните одну из функций вашего приложения, которая выполняет много работы.

    Если дважды щелкнуть функцию, на левой панели откроется представление Caller / Callee .

    В этом представлении выбранная функция отображается в заголовке и в поле Текущая функция (в данном примере GetNumber). Функция, которая вызвала текущую функцию, показана слева под заголовком Вызов функций , а любые функции, вызываемые текущей функцией, показаны в поле Вызываемые функции справа.(Вы можете выбрать любой из полей, чтобы изменить текущую функцию.)

    В этом представлении отображается общее время (мс) и процент от общего времени работы приложения, затраченного на выполнение функции.
    Тело функции также показывает общее количество времени (и процент времени), проведенное в теле функции, за исключением времени, затраченного на вызов и вызываемые функции. (В этом примере 2367 из 2389 мс были потрачены на тело функции, а оставшиеся 22 мс были потрачены на внешний код, вызываемый этой функцией).

    [! СОВЕТ]
    Высокие значения в Function Body могут указывать на узкое место производительности внутри самой функции.

  3. Чтобы увидеть представление более высокого уровня, показывающее порядок, в котором вызываются функции, выберите Дерево вызовов из раскрывающегося списка в верхней части панели.

    Каждая пронумерованная область на рисунке относится к этапу процедуры.

    ::: moniker range = «> = vs-2019»

    ::: конец прозвища
    ::: moniker range = «vs-2017»

    ::: конец прозвища

    Изображение Описание
    Узел верхнего уровня в деревьях вызовов использования ЦП является псевдоузлом
    В большинстве приложений, когда параметр Показать внешний код отключен, узел второго уровня — это узел [Внешний код] , который содержит код системы и платформы, который запускает и останавливает приложение, рисует пользовательский интерфейс, управляет планированием потоков, и предоставляет приложению другие низкоуровневые сервисы.
    Дочерние элементы узла второго уровня — это методы пользовательского кода и асинхронные подпрограммы, которые вызываются или создаются системой второго уровня и кодом инфраструктуры.
    Дочерние узлы метода содержат данные только для вызовов родительского метода. Когда Показать внешний код отключен, методы приложения также могут содержать узел [Внешний код] .

    Дополнительная информация о значениях столбца:

    • Всего ЦП показывает, сколько работы было выполнено функцией и вызванными ею функциями.Высокие общие значения ЦП указывают на функции, которые в целом являются наиболее дорогостоящими.

    • Self CPU показывает, сколько работы было выполнено кодом в теле функции, исключая работу, выполненную функциями, которые были вызваны им. Высокие значения Self CPU могут указывать на снижение производительности внутри самой функции.

    • Модули Имя модуля, содержащего функцию, или количество модулей, содержащих функции, в узле [Внешний код].

    ::: moniker range = «> = vs-2019»
    Чтобы увидеть в дереве вызовов вызовы функций, которые используют самый высокий процент использования ЦП, щелкните Expand Hot Path .

    ::: конец прозвища

    [! ПРИМЕЧАНИЕ]
    Если вы видите код в дереве вызовов, помеченный как «сломанный» код или «недоступный стек», это означает, что события трассировки событий Windows (ETW), вероятно, были отброшены. Попробуйте собрать тот же след во второй раз, чтобы решить проблему.

Посмотреть внешний код

Внешний код — это функции в компонентах системы и фреймворка, которые выполняются написанным вами кодом.Внешний код включает функции, которые запускают и останавливают приложение, рисуют пользовательский интерфейс, управляют потоками и предоставляют другие низкоуровневые службы для приложения. В большинстве случаев вас не интересует внешний код, поэтому инструмент использования ЦП собирает внешние функции пользовательского метода в один узел [Внешний код] .

Если вы хотите просмотреть пути вызова внешнего кода, выберите Показать внешний код из списка Фильтр просмотра , а затем выберите Применить .

Имейте в виду, что многие цепочки вызовов внешнего кода глубоко вложены, поэтому ширина столбца «Имя функции» может превышать ширину отображения всех компьютерных мониторов, кроме самого большого. Когда это происходит, имена функций отображаются как […] .

Используйте поле поиска, чтобы найти узел, который вы ищете, затем используйте горизонтальную полосу прокрутки, чтобы отобразить данные.

[! СОВЕТ]
Если вы профилируете внешний код, который вызывает функции Windows, вы должны убедиться, что у вас самая последняя версия. pdb файлов. Без этих файлов в представлениях отчетов будут перечислены загадочные и трудные для понимания имена функций Windows. Дополнительные сведения о том, как убедиться, что у вас есть нужные файлы, см. В разделе Указание символа (.pdb) и исходных файлов в отладчике.

Следующие шаги

Из этого руководства вы узнали, как собирать и анализировать данные об использовании ЦП. Если вы уже выполнили первый взгляд на инструменты профилирования, вы можете быстро узнать, как анализировать использование памяти в ваших приложениях.

[! Div]
Использование памяти профиля в Visual Studio

Профилирование приложений CUDA в Windows с помощью NVIDIA Compute Visual Profiler

Написание приложений, использующих огромные возможности параллельных вычислений графических процессоров с поддержкой CUDA, стало еще проще с выпуском CUDA Toolkit 3.2 RC. Что еще более интересно, он поставляется с улучшенным визуальным профилировщиком CUDA, который позволяет вам профилировать каждый аспект вашего приложения. Сегодня я собираюсь провести вас через простой процесс профилирования вашего приложения CUDA.

Прежде, чем мы начнем…

Убедитесь, что у вас есть нужные вещи:

  • Последний драйвер CUDA (на момент написания последний драйвер — 260,99 для Win7 x64)
  • CUDA toolkit 3.2 RC (Release Candidate 2 также был выпущен сегодня)
  • Visual Studio 2010/2008 (на самом деле не требуется, но у вас должен быть исполняемый файл приложения для профилирования)

Настройка профилировщика

После установки последней версии CUDA toolkit 3.2RC, запустите NVIDIA Visual Profiler

(Ярлык для профилировщика также размещен на рабочем столе на всякий случай)

Так как это будет ваш первый раз, нажмите кнопку Profile application в диалоговом окне. Настройки сеанса появится диалоговое окно. Щелкните Launch , а затем перейдите к исполняемому файлу вашего приложения CUDA. Я собираюсь использовать образец приложения, которое поставляется с NVIDIA CUDA SDK (cudaEncode.exe, если быть точным):

Профилирование приложения

Обратите внимание, что я уменьшил максимальное время выполнения с 30 секунд по умолчанию до 2 секунд (оставьте значение по умолчанию, если вы не уверены, сколько времени займет 1 запуск приложения). Оставьте для всех остальных параметров значения по умолчанию и нажмите кнопку Launch . Будет 10 итераций, и каждая итерация будет иметь несколько запусков приложений. Результаты профилирования каждой итерации записываются в файл csv (значения, разделенные запятыми) в рабочем каталоге.По завершении итераций вы заметите пару файлов, сгенерированных в рабочем каталоге. Таковы результаты профилирования.

Просмотр результатов профиля

Как уже было сказано, профилируется почти каждый аспект вашего приложения CUDA. Чтобы увидеть результаты, перейдите в File -> Import , перейдите в свой рабочий каталог и загрузите любой из 10 сгенерированных файлов CSV.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *