Aracılığıyla paylaş


Visual Studio'da BenchmarkDotNet verilerini analiz etme

Visual Studio'da BenchmarkDotNet verilerini toplamak ve görüntülemek için profil oluşturma araçlarını kullanabilirsiniz. BenchmarkDotNet, performans karşılaştırması için tasarlanmış açık kaynaklı bir .NET kitaplığıdır. .NET kodunuzun yürütme süresini, bellek kullanımını ve diğer performans ölçümlerini güvenilir ve yinelenebilir bir şekilde ölçme ve karşılaştırma işlemini otomatikleştirir.

BenchmarkDotNet'i, projenize gerekli NuGet paketlerini yükleyip kodunuz için ilgilendiğiniz performans bilgisi türüyle eşleşen öznitelikler ekleyerek kullanırsınız.

Önkoşullar

Projenizi ayarlayın

Karşılaştırma öznitelikleri bir .NET konsol uygulamasına eklenmelidir. Öznitelikler, diğer proje türlerine başvuran sarmalayıcı işlevlerine eklenebilir.

Projenizi BenchmarkDotNet desteğine hazırlamak için aşağıdaki yöntemlerden birini kullanın:

  • Mevcut konsol projelerini açın veya yeni bir konsol projesi oluşturun. Bu senaryoda BenchmarkDotNet desteğini el ile eklersiniz.

  • Kıyaslama Projesi şablonunu kullanın. Bu makalede açıklanan adımlardan bazıları yalnızca BenchmarkDotNet desteğini el ile eklediğinizde gereklidir.

    Benchmark Project şablonu, CPU Kullanımı profil oluşturma ve Copilot içgörüleri için yerleşik destek sunan tam tümleşik bir BenchmarkDotNet projesi oluşturur. Şablonu kullanmak için, yeni bir proje oluştururken proje türleri listesinden Profil Oluşturma'yı seçin ve ardından Karşılaştırma Projesi'ni seçin. Öznitelikler hakkında bilgi için bkz . Kodunuzun özniteliğini oluşturma.

Visual Studio'da BenchmarkDotNet şablonunun ekran görüntüsü.

Bir konsol projesi oluşturun veya mevcut konsol projelerini kullanın.

Karşılaştırma öznitelikleri bir .NET konsol uygulamasına eklenmelidir. Öznitelikler, diğer proje türlerine başvuran sarmalayıcı işlevlerine eklenebilir.

Kodunuzu öznitelik oluşturma

BenchmarkDotNet tanılayıcısını karşılaştırma sınıflarınıza öznitelik olarak eklediğinizde, karşılaştırmalar çalıştırıldıktan sonra uygulamayı bir .diagsession dosyası oluşturacak şekilde yapılandırabilirsiniz. Daha sonra .diagsession dosyasını Visual Studio'da açabilir ve karşılaştırmalar için profil oluşturma verilerini görüntüleyebilirsiniz.

Aşağıdaki tanılayıcılar desteklenir:

  • CPU Kullanım Teşhis Aracı
  • VeritabanıTanılama
  • DotNetCountersDiagnoser
  • EventsDiagnoser
  • FileIODiagnoser

Her tanılayıcı, bu tanılayıcıyla ilgili performans verileri oluşturur. Örneğin, CPUUsageDiagnoser içinde CPU verileri olan bir .diagsession dosyası oluşturur ve DatabaseDiagnoser veritabanı işlemleriyle ilgili verileri içeren bir .diagsession dosyası oluşturur. Sınırlamalar ilişkili profil oluşturma aracına karşılık gelir. Örneğin, profil oluşturucunun Veritabanı aracı ADO.NET veya Entity Framework Core üzerinde çalışır.

Kodunuzu tanılayıcılara ve karşılaştırmalara bağlamak için:

  1. Tanılamacı adını, veri oluşturmak istediğiniz karşılaştırmaları içeren sınıfa öznitelik olarak ekleyin.

  2. Özniteliğini Benchmark , performans için test etmek istediğiniz yöntemlere ekleyin.

    Örneğin, CPUUsageDiagnoser için aşağıdaki kodu kullanabilirsiniz.

    Kıyaslama Projesi şablonunu kullanıyorsanız, şablonda örnek kod zaten sağlanmıştır. BenchmarkDotNet desteğini el ile ekliyorsanız aşağıdaki örnek kodu kullanabilirsiniz.

    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 verilerini toplama ve görüntüleme

  1. Derlemenizi Yayın derlemesine ayarlayın; Hata Ayıklama derlemesi yerine.

  2. .diagsession dosyasını oluşturmak için uygulamayı çalıştırın.

    Dosyanın konumunu almak için konsol çıkışını denetleyin. Örneğin:

    // * Diagnostic Output - VSDiagnosticsDiagnoser * 
    Collection result moved to 'BenchmarkDotNet_Md5VsSha256_20231218_123326.diagsession'.
    Session : {7f38bcc2-c692-4266-aa24-b12bc5325ea4}
      Stopped
    Exported diagsession file: *.diagsession
    
  3. Visual Studio'da Dosya > Aç > Dosya seçeneklerini seçin, .diagsession dosyasının konumuna gidin ve ardından dosyayı seçip açın.

  4. BenchmarkDotNet karşılaştırmalarının verilerini görüntülemek için Kıyaslamalar sekmesini seçin.

    Visual Studio'da BenchmarkDotNet verilerinin ekran görüntüsü.

    Karşılaştırmalar sekmesindeki sonuçlar hakkında daha fazla bilgi için BenchmarkDotNet belgelerine bakın.

  5. Sonuçlarda bir satıra sağ tıklayın ve zaman çizelgesi grafiğini karşılaştırmayla eşitlemek için Zaman aralığı seç'i seçin.

  6. CPU Kullanımı veya Ayırmalar gibi kullanılabilir sekmelerden birini seçin.

    Veri toplamak için kullandığınız tanılayıcıya bağlı olarak bellek ayırma, CPU kullanımı, sayaçlar ve diğer performans verileriyle ilgili içgörüler elde edebilirsiniz. Bellek ayırmalarını analiz etmek için [ MemoryDiagnoser ] özniteliğini ekleyerek yerleşik MemoryDiagnoser'ı kullanın. Daha fazla bilgi için bkz. Tanıcılar.

    Uyarı

    Profil oluşturucu yalnızca [MemoryDiagnoser] ve bu makalede daha önce listelenen tanılayıcıları destekler.

    Bellek ayırmalarını analiz etmek için profil oluşturucuyu kullanma örneği için Visual Studio Profiler ile karşılaştırma blog gönderisine bakın.

    CPU Kullanımı gibi diğer sekmelerle ilgili verileri analiz etmek için profil oluşturma belgelerindeki ilgili makalelere bakın.

Copilot ile iyileştirme

BenchmarkDotNet karşılaştırmalarınız için CPU ve bellek ayırma iyileştirmelerini doğrudan CodeLens kullanarak düzenleyiciden tetikleyebilirsiniz. Bu, performans ayarlamayı daha erişilebilir ve sorunsuz hale getirir ve kodladığınız yerde CPU ve bellek ayırma sorunlarını bulup düzeltmenize yardımcı olur.

Karşılaştırmanızın üzerindeki CodeLens göstergesini seçin ve ardından Copilot ile Ayırmaları İyileştir seçeneğini belirleyin.

Copilot ile iyileştirme işleminin ekran görüntüsü.