Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Средства профилирования можно использовать для сбора и просмотра данных BenchmarkDotNet в Visual Studio.
При добавлении средства диагностики BenchmarkDotNet в классы теста в качестве атрибута создается файл diagsession после выполнения теста. Затем можно открыть диагсессию в Visual Studio и просмотреть данные профилирования для тестов.
Поддерживаются следующие средства диагностики:
- CPUUsageDiagnoser
- DatabaseDiagnoser
- DotNetCountersDiagnoser
- EventsDiagnoser
- FileIODiagnoser
Каждое средство диагностики создает данные о производительности, связанные с этим диагностическим средством. Например, CPUUsageDiagnoser создает файл .diagsession с данными о ЦП, а DatabaseDiagnoser создает файл .diagsession с данными об операциях базы данных. Ограничения соответствуют связанному инструменту профилирования. Например, средство базы данных профилировщика работает на ADO.NET или Entity Framework Core.
Предпосылки
Visual Studio 2022 версии 17.9 или более поздней
Проект теста должен включать следующие два пакета NuGet:
Сбор данных Benchmark.NET
Создайте консольный проект.
Функции теста должны быть добавлены в консольное приложение .NET. Эти функции могут быть функциями-оболочками, ссылающимися на другие типы проектов.
Настройте вашу сборку как релизную, а не как отладочную.
Атрибутируйте код для диагностики и тестов, а также включите код для выполнения тестов (
BenchmarkRunner.Run
).Добавьте имя средства диагностики в качестве атрибута в класс, содержащий тесты, для которых требуется создать данные.
Например, можно использовать следующий код для диагноста использования ЦПУ.
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); } } }
Запустите приложение, чтобы создать файл diagsession .
Проверьте выходные данные консоли, чтобы получить расположение файла. Рассмотрим пример.
// * Diagnostic Output - VSDiagnosticsDiagnoser * Collection result moved to 'BenchmarkDotNet_Md5VsSha256_20231218_123326.diagsession'. Session : {7f38bcc2-c692-4266-aa24-b12bc5325ea4} Stopped Exported diagsession file: *.diagsession
Просмотр данных BenchmarkDotNet
В Visual Studio выберите Файл > Открыть > Файл и перейдите к расположению .diagsession файла, а затем выберите и откройте файл.
Перейдите на вкладку Benchmarks , чтобы просмотреть данные для тестов BenchmarkDotNet.
Дополнительные сведения о результатах на закладке "Тесты" см. в документации BenchmarkDotNet.
Щелкните правой кнопкой мыши строку в результатах и выберите диапазон времени , чтобы синхронизировать график временной шкалы с тестом.
Выберите одну из доступных вкладок, таких как использование ЦП или выделение ресурсов.
В зависимости от средства диагностики, используемого для сбора данных, можно получить аналитические сведения, связанные с выделением памяти, использованием ЦП, счетчиками и другими данными о производительности. Чтобы проанализировать выделение памяти, используйте встроенный атрибут MemoryDiagnoser , добавив атрибут [MemoryDiagnoser]. Дополнительные сведения см. в разделе "Диагностика".
Замечание
Профилировщик поддерживает только [MemoryDiagnoser] и диагностические средства, перечисленные ранее в этой статье.
Пример использования профилировщика для анализа выделения памяти см. в записи блога о тестировании с помощью Visual Studio Profiler.
Чтобы проанализировать данные, связанные с другими вкладками, такими как использование ЦП, см. соответствующие статьи в документации по профилированию.