Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Narzędzia profilowania umożliwiają zbieranie i wyświetlanie danych BenchmarkDotNet w programie Visual Studio. BenchmarkDotNet to biblioteka platformy .NET typu open source przeznaczona do testów porównawczych wydajności. Automatyzuje proces mierzenia i porównywania czasu wykonywania, użycia pamięci i innych metryk wydajności kodu platformy .NET w niezawodny i powtarzalny sposób.
Używasz rozwiązania BenchmarkDotNet, instalując wymagane pakiety NuGet w projekcie, a następnie dodając atrybuty do kodu zgodnego z typem interesujących Cię informacji o wydajności.
Wymagania wstępne
Visual Studio 2022 w wersji 17.9 lub nowszej
Projekt porównawczy musi zawierać następujące dwa pakiety NuGet:
Jeśli używasz szablonu projektu Benchmark, te pakiety NuGet są obecne podczas tworzenia projektu.
Konfigurowanie projektu
Atrybuty testu porównawczego należy dodać do aplikacji konsolowej platformy .NET. Atrybuty można dodać do funkcji opakowujących odnoszących się do innych typów projektów.
Aby przygotować projekt do obsługi aplikacji BenchmarkDotNet, użyj jednej z następujących metod:
Otwórz istniejący projekt konsoli lub utwórz nowy projekt konsoli. W tym scenariuszu ręcznie dodasz obsługę benchmarkDotNet.
Użyj szablonu Projektu porównawczego . Niektóre kroki opisane w tym artykule są wymagane tylko w przypadku ręcznego dodawania obsługi BenchmarkDotNet.
Szablon Projektu Benchmark generuje w pełni zintegrowany projekt BenchmarkDotNet z wbudowaną obsługą profilowania użycia CPU i analizy Copilot. Aby użyć szablonu, wybierz pozycję Profilowanie z listy typów projektów podczas tworzenia nowego projektu, a następnie wybierz pozycję Projekt porównawczy. Aby uzyskać informacje o atrybutach, zobacz Atrybut kodu.
Utwórz projekt konsoli lub użyj istniejącego projektu konsoli.
Atrybuty testu porównawczego należy dodać do aplikacji konsolowej platformy .NET. Atrybuty można dodać do funkcji opakowujących, które odnoszą się do innych typów projektów.
Atrybucja kodu
Po dodaniu diagnozy BenchmarkDotNet do klas porównawczych jako atrybutu należy skonfigurować aplikację tak, aby wygenerowała plik diagsession po uruchomieniu testów porównawczych. Następnie możesz otworzyć plik diagsession w programie Visual Studio i wyświetlić dane profilowania dla testów porównawczych.
Obsługiwane są następujące diagnozy:
- Procesor CPUUsageDiagnoser
- DatabaseDiagnoser
- DotNetCountersDiagnoser
- EventDiagnoser
- FileIODiagnoser
Każdy moduł diagnostyczny generuje dane wydajności związane z tym modułem diagnostycznym. Na przykład procesor CPUUsageDiagnoser generuje plik diagsession z danymi procesora CPU, a narzędzie DatabaseDiagnoser generuje plik diagsession z danymi w operacjach bazy danych. Ograniczenia odpowiadają skojarzonemu narzędziu profilowania. Na przykład narzędzie bazy danych profilera działa na platformie ADO.NET lub Entity Framework Core.
Aby przypisać kod do diagnostyki i testów porównawczych:
Dodaj nazwę diagnozatora jako atrybut do klasy zawierającej testy porównawcze, dla których chcesz wygenerować dane.
BenchmarkDodaj atrybut do metod, które chcesz przetestować pod kątem wydajności.Na przykład można użyć następującego kodu w CPUUsageDiagnoser.
Jeśli używasz szablonu Projektu porównawczego , przykładowy kod jest już podany w szablonie. Jeśli ręcznie dodasz obsługę benchmarkDotNet, możesz użyć następującego przykładowego kodu.
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); } } }
Zbieranie i wyświetlanie danych Benchmark.NET
Ustaw swoją kompilację na Release zamiast na Debug.
Uruchom aplikację, aby wygenerować plik diagsession .
Sprawdź dane wyjściowe konsoli, aby uzyskać lokalizację pliku. Przykład:
// * Diagnostic Output - VSDiagnosticsDiagnoser * Collection result moved to 'BenchmarkDotNet_Md5VsSha256_20231218_123326.diagsession'. Session : {7f38bcc2-c692-4266-aa24-b12bc5325ea4} Stopped Exported diagsession file: *.diagsessionW programie Visual Studio wybierz pozycję Plik > Otwórz > plik i przejdź do lokalizacji pliku diagsession , a następnie wybierz i otwórz plik.
Wybierz kartę Testy porównawcze , aby wyświetlić dane dla testów porównawczych BenchmarkDotNet.
Aby uzyskać więcej informacji na temat wyników na karcie Testy porównawcze , zobacz dokumentację BenchmarkDotNet .
Kliknij prawym przyciskiem myszy wiersz w wynikach i wybierz pozycję Wybierz zakres czasu , aby zsynchronizować wykres osi czasu z testem porównawczym.
Wybierz jedną z dostępnych kart, takich jak użycie CPU lub alokacje.
W zależności od diagnozy użytej do zbierania danych można uzyskać szczegółowe informacje dotyczące alokacji pamięci, użycia procesora CPU, liczników i innych danych wydajności. Aby przeanalizować alokacje pamięci, użyj wbudowanego atrybutu MemoryDiagnoser , dodając atrybut [MemoryDiagnoser]. Aby uzyskać więcej informacji, zobacz Diagnozowanie.
Uwaga / Notatka
Profiler obsługuje tylko [MemoryDiagnoser] oraz diagnozatory wymienione wcześniej w tym artykule.
Aby zapoznać się z przykładem użycia profilera do analizowania alokacji pamięci, zobacz wpis w blogu Benchmarking with Visual Studio Profiler (Testowanie porównawcze przy użyciu profilera programu Visual Studio).
Aby analizować dane związane z innymi kartami, takimi jak użycie procesora CPU, zobacz odpowiednie artykuły w dokumentacji profilowania.
Optymalizowanie za pomocą narzędzia Copilot
Optymalizacje alokacji procesora CPU i pamięci dla testów porównawczych BenchmarkDotNet można wyzwalać bezpośrednio z poziomu edytora przy użyciu funkcji CodeLens. Dzięki temu dostrajanie wydajności jest bardziej dostępne i bezproblemowe, co ułatwia znajdowanie i rozwiązywanie problemów z alokacją procesora CPU i pamięci w miejscu, w którym kodujesz.
Wybierz wskaźnik CodeLens powyżej testu porównawczego, a następnie wybierz opcję Optymalizuj alokacje za pomocą narzędzia Copilot.
Treści powiązane
- Pierwsze spojrzenie na profilowanie
- Którego narzędzia należy użyć?