Gereksinimler: Geliştirme sürecinde, aynı iki fonksiyon yöntemi gereksinimlerimizi karşılayabilir, ancak performans nedenleriyle en iyi performans yöntemini seçeceğiz, kodun performansını nasıl test edeceğiz?
Performans kıyaslaması, programcılara iki kod parçası veya yönteminin performansını karşılaştırmasına yardımcı olabilir; bu da kodun yeniden yazılması veya yeniden düzenlemesi için iyi bir nicelik standardı sağlayabilir. Performans kıyaslamaları olmadan, yöntem A'yı yöntem B'ye değiştirdiğinizde çıplak gözle performans farkını nasıl anlayabileceğinizi hayal etmek zor.
BenchmarkDotNet, resmi web sitesinde bulunan güçlü bir .Net performans kıyaslama kütüphanesidirBağlantı girişi görünür.
İlk olarak, yeni bir .NET Core 3.1 konsol projesi oluşturacağız. Proje adı: BenchmarkTest
BenchmarkDotNet'i nuget komutuyla kurun, kod şu şekildedir:
Projenin hedef platformunu aşağıdaki gibi değiştirmek için projeye çift tıklayın:
TestMD5 ve TestSHA1 yöntemlerinin performansını sırasıyla .NET Framework 4.7.2 ve .NET Core 3.1 çerçeveleri altında test ediyoruz.
Kod şöyledir:
Aşağıdaki hatayla çalıştırmaya çalışın:
Kıyaslamaların doğrulanması: Benchmarkları tanımlayan Assembly BenchmarkTest optimize edilmemiştir Benchmark, optimizasyon etkinleştirilmeden (muhtemelen bir DEBUG yapılandırması) oluşturuldu. Lütfen, RELEASE içinde oluşturun. Benchmark'ları hata ayıklamak isterseniz, lütfen bakınBağlantı girişi görünür.
Projeyi RELEASE moduna geçirinaşağıda gösterildiği gibi projeyi yeniden başlatmak için:
* Özet *
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.18363.1379 (1909/Kasım 2018Güncelleme/19H2) Intel Core i5-8259U CPU 2.30GHz (Coffee Lake), 1 CPU, 8 mantıklı ve 4 fiziksel çekirdek .NET Core SDK=5.0.103 [Sunucu] : .NET Core 3.1.12 (CoreCLR 4.700.21.6504, CoreFX 4.700.21.6905), X64 RyuJIT .NET 4.7.2 : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT .NET Core 3.1 : .NET Core 3.1.12 (CoreCLR 4.700.21.6504, CoreFX 4.700.21.6905), X64 RyuJIT
| Yöntem | İş | Çalışma süresi | Kötü | Hata | StdDev | Min | Max | Medyan | |--------- |-------------- |-------------- |---------:|----------:|----------:|---------:|---------:|---------:| | TestMD5 | .NET 4.7.2 | .NET 4.7.2 | 4.119 ABD | 0.0804 ABD | 0.1045 ABD | 3.958 ABD | 4.318 ABD | 4.123 ABD | | TestSHA1 | .NET 4.7.2 | .NET 4.7.2 | 4.043 ABD | 0.0793 ABD | 0.1085 ABD | 3.926 ABD | 4.289 ABD | 4.003 ABD | | TestMD5 | .NET Core 3.1 | .NET Core 3.1 | 1.216 ABD | 0.0122 ABD | 0.0114 ABD | 1.202 ABD | 1.238 ABD | 1.214 ABD | | TestSHA1 | .NET Core 3.1 | .NET Core 3.1 | 1.307 ABD | 0.0186 ABD | 0.0165 ABD | 1.284 ABD | 1.336 ABD | 1.307 ABD |
* İpucuları * Dışlamalar TestContext.TestSHA1: .NET 4.7.2 -> 1 outlier kaldırıldı (5.52 us) TestContext.TestSHA1: .NET Core 3.1 -> 1 outlier kaldırıldı (1.37 us)
* Efsaneler * Ortalama: Tüm ölçümlerin aritmetik ortalaması Hata: %99,9 güven aralığının yarısı StdDev: Tüm ölçümlerin standart sapması Min : Minimum Max: Maksimum Medyan : Tüm ölçümlerin üst yarısını ayıran değer (yüzde 50. dilim) 1 biz : 1 mikrosaniye (0.000001 saniye)
***** BenchmarkRunner: ***** Sonu ** Kaldı: 0 ölçüt(ler) kullanıldı ** Çalışma süresi: 00:01:14 (74 saniye), yürütülen benchmarklar: 4
Küresel toplam zaman: 00:01:20 (80.63 saniye), gerçekleştirilen benchmarklar: 4 * Eser temizliği * Çalıştırıldığında, test sonuçları projemizde \BenchmarkTest\bin\Release\netcoreapp3.1\BenchmarkDotNet.Artifacts\results klasörüne, csv, html, md ve diğer formatlarda kaydedilir.
Not:SimpleJob hedef çerçeve seçimi yanlıştır ve doğru şekilde çalıştırılmayabilirŞöyle:
Paralel olarak derleme yapamadım, ardışık derlemeye geçtim
Kaynaklar:Bağlantı girişi görünür.
|