Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Средства профилирования можно использовать для сбора и просмотра данных BenchmarkDotNet в Visual Studio. BenchmarkDotNet — это библиотека .NET с открытым кодом, предназначенная для оценки производительности. Он автоматизирует процесс измерения и сравнения времени выполнения, использования памяти и других метрик производительности кода .NET в надежном и повторяемом способе.
Вы используете BenchmarkDotNet, устанавливая необходимые пакеты NuGet в проекте, а затем добавляя атрибуты в код, соответствующий типу интересующей вас информации о производительности.
Предпосылки
Visual Studio 2022 версии 17.9 или более поздней
Проект теста должен включать следующие два пакета NuGet:
При использовании шаблона проекта Benchmark эти пакеты NuGet присутствуют при создании проекта.
Настройка проекта
Атрибуты теста должны быть добавлены в консольное приложение .NET. Атрибуты можно добавить в функции-оболочки, ссылающиеся на другие типы проектов.
Чтобы подготовить проект к поддержке BenchmarkDotNet, используйте один из следующих методов:
Откройте существующий проект консоли или создайте новый консольный проект. В этом сценарии вы вручную добавите поддержку BenchmarkDotNet.
Используйте шаблон проекта Benchmark . Некоторые шаги, описанные в этой статье, необходимы только при добавлении поддержки BenchmarkDotNet вручную.
Шаблон проекта Benchmark создает полностью интегрированный проект BenchmarkDotNet со встроенной поддержкой профилирования использования ЦП и аналитики Copilot. Чтобы использовать шаблон, выберите профилирование из списка типов проектов при создании нового проекта, а затем выберите "Тест проекта". Сведения о том, как атрибутировать код, см. в разделе Attribute your code.
Создайте консольный проект или используйте существующий консольный проект.
Атрибуты теста должны быть добавлены в консольное приложение .NET. Атрибуты можно добавить в функции-оболочки, ссылающиеся на другие типы проектов.
Укажите авторство вашего кода
При добавлении средства диагностики BenchmarkDotNet в классы бенчмарка в качестве атрибута приложение настраивается для создания файла .diagsession после выполнения бенчмарков. Затем можно открыть файл diagsession в Visual Studio и просмотреть данные профилирования для тестов.
Поддерживаются следующие средства диагностики:
- CPUUsageDiagnoser
- DatabaseDiagnoser
- DotNetCountersDiagnoser
- EventsDiagnoser
- FileIODiagnoser
Каждое средство диагностики создает данные о производительности, связанные с этим диагностическим средством. Например, CPUUsageDiagnoser создает файл .diagsession с данными о ЦП, а DatabaseDiagnoser создает файл .diagsession с данными об операциях базы данных. Ограничения соответствуют связанному инструменту профилирования. Например, средство базы данных профилировщика работает на ADO.NET или Entity Framework Core.
Чтобы атрибутировать код для диагностических и тестовых показателей, выполните следующее:
Добавьте имя средства диагностики в качестве атрибута в класс, содержащий тесты, для которых требуется создать данные.
Добавьте атрибут
Benchmarkк методам, которые требуется протестировать на производительность.Например, можно использовать следующий код для диагноста использования ЦПУ.
Если вы используете шаблон проекта Benchmark , пример кода уже представлен в шаблоне. Если вы вручную добавляете поддержку BenchmarkDotNet, можно использовать следующий пример кода.
using System; using System.Security.Cryptography; using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Running; using Microsoft.VSDiagnostics; namespace MyBenchmarks { [CPUUsageDiagnoser] public class Md5VsSha256 { private const int N = 10000; private readonly byte[] data; private readonly SHA256 sha256 = SHA256.Create(); private readonly MD5 md5 = MD5.Create(); public Md5VsSha256() { data = new byte[N]; new Random(42).NextBytes(data); } [Benchmark] public byte[] Sha256() => sha256.ComputeHash(data); [Benchmark] public byte[] Md5() => md5.ComputeHash(data); } public class Program { public static void Main(string[] args) { var summary = BenchmarkRunner.Run(typeof(Program).Assembly); } } }
Сбор и просмотр данных Benchmark.NET
Задайте сборку выпуска вместо отладочной сборки.
Запустите приложение, чтобы создать файл diagsession .
Проверьте выходные данные консоли, чтобы получить расположение файла. Рассмотрим пример.
// * Diagnostic Output - VSDiagnosticsDiagnoser * Collection result moved to 'BenchmarkDotNet_Md5VsSha256_20231218_123326.diagsession'. Session : {7f38bcc2-c692-4266-aa24-b12bc5325ea4} Stopped Exported diagsession file: *.diagsessionВ Visual Studio выберите Файл > Открыть > Файл и перейдите к расположению .diagsession файла, а затем выберите и откройте файл.
Перейдите на вкладку Benchmarks , чтобы просмотреть данные для тестов BenchmarkDotNet.
Дополнительные сведения о результатах на закладке "Тесты" см. в документации BenchmarkDotNet.
Щелкните правой кнопкой мыши строку в результатах и выберите диапазон времени , чтобы синхронизировать график временной шкалы с тестом.
Выберите одну из доступных вкладок, таких как использование ЦП или выделение ресурсов.
В зависимости от средства диагностики, используемого для сбора данных, можно получить аналитические сведения, связанные с выделением памяти, использованием ЦП, счетчиками и другими данными о производительности. Чтобы проанализировать выделение памяти, используйте встроенный атрибут MemoryDiagnoser , добавив атрибут [MemoryDiagnoser]. Дополнительные сведения см. в разделе "Диагностика".
Замечание
Профилировщик поддерживает только [MemoryDiagnoser] и диагностические средства, перечисленные ранее в этой статье.
Пример использования профилировщика для анализа выделения памяти см. в записи блога о тестировании с помощью Visual Studio Profiler.
Чтобы проанализировать данные, связанные с другими вкладками, такими как использование ЦП, см. соответствующие статьи в документации по профилированию.
Оптимизация с помощью Copilot
Вы можете активировать оптимизацию распределения ЦП и памяти для тестов BenchmarkDotNet непосредственно из редактора с помощью CodeLens. Это делает настройку производительности более доступной и простой, помогая находить и устранять проблемы выделения ЦП и памяти прямо в коде.
Выберите индикатор CodeLens над контрольной точкой, а затем выберите параметр Оптимизировать выделение с помощью Copilot.