Изисквания: В процеса на разработка едни и същи два функционални метода могат да отговорят на нашите изисквания, но поради съображения за производителност ще изберем най-добрия метод за извикване, как да тестваме производителността на кода?
Бенчмаркингът на производителността може да помогне на програмистите да сравнят производителността на два фрагмента или метода на кода, което може да предостави добър стандарт за количествена оценка при пренаписване или рефакториране на кода. Без бенчмаркове за производителност е трудно да си представим как можеш да забележиш разликата в производителността с просто око, когато смениш метод А на метод Б.
BenchmarkDotNet е мощна библиотека с бенчмаркове на .Net производителността на официалния уебсайтВходът към хиперлинк е видим.
Първо ще създадем нов проект за конзола .NET Core 3.1. Името на проекта е: BenchmarkTest
Инсталирайте BenchmarkDotNet с командата nuget, кодът е следният:
Двойно кликване върху проекта, за да модифицирате целевата платформа на проекта, както следва:
Тестваме производителността на методите TestMD5 и TestSHA1 съответно под рамките .NET Framework 4.7.2 и .NET Core 3.1.
Кодът е следният:
Опитайте да го изпълните със следната грешка:
Валидиране на бенчмаркове: Assembly BenchmarkTest, който дефинира бенчмаркове, не е оптимизиран Benchmark беше създаден без активирана оптимизация (най-вероятно DEBUG конфигурация). Моля, изградете го в RELEASE. Ако искате да дебъгнете бенчмарковете, моля, вижтеВходът към хиперлинк е видим.
Превключи проекта в режим RELEASEЗа да започнем проекта отново, както е показано по-долу:
* Резюме *
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.18363.1379 (1909/November2018Update/19H2) Intel Core i5-8259U процесор 2.30GHz (Coffee Lake), 1 процесор, 8 логически и 4 физически ядра .NET Core SDK=5.0.103 [Хост] : .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
| Метод | Работа | Време на изпълнение | Mean | Грешка | StdDev | Мин | Макс | Медиана | |--------- |-------------- |-------------- |---------:|----------:|----------:|---------:|---------:|---------:| | TestMD5 | .NET 4.7.2 | .NET 4.7.2 | 4.119 САЩ | 0.0804 US | 0.1045 US | 3.958 САЩ | 4.318 САЩ | 4.123 САЩ | | TestSHA1 | .NET 4.7.2 | .NET 4.7.2 | 4.043 САЩ | 0.0793 САЩ | 0.1085 US | 3.926 САЩ | 4.289 САЩ | 4.003 САЩ | | TestMD5 | .NET Core 3.1 | .NET Core 3.1 | 1.216 САЩ | 0.0122 САЩ | 0.0114 US | 1.202 САЩ | 1.238 САЩ | 1.214 САЩ | | TestSHA1 | .NET Core 3.1 | .NET Core 3.1 | 1.307 САЩ | 0.0186 сащ | 0.0165 сащ | 1.284 САЩ | 1.336 САЩ | 1.307 САЩ |
* Подсказки * Изключения TestContext.TestSHA1: .NET 4.7.2 -> 1 изключение беше премахнат (5.52 us) TestContext.TestSHA1: Изключението на .NET Core 3.1 -> 1 беше премахнато (1.37 us)
* Легенди * Средна стойност : Аритметична средна стойност на всички измервания Грешка: Половината от 99.9% доверителен интервал StdDev : Стандартно отклонение на всички измервания Минимум : Минимум Макс: Максимум Медиана: Стойност, разделяща горната половина на всички измервания (50-ти перцентил) 1 us : 1 микросекунда (0.000001 сек)
***** BenchmarkRunner: Край на ***** ** Останаха 0 еталон(и) за изпълнение ** Време на изпълнение: 00:01:14 (74 сек), изпълнени бенчмаркове: 4
Глобално общо време: 00:01:20 (80.63 сек), изпълнени бенчмаркове: 4 * Почистване на артефакти * След като бъдат изпълнени, резултатите от теста се запазват в папката на нашия проект \BenchmarkTest\bin\Release\netcoreapp3.1\BenchmarkDotNet.Artifacts\results, в csv, html, md и други формати.
Бележка:Изборът на целеви кадри в SimpleJob е неправилен и може да не се изпълнява правилноКакто следва:
Не успях да сглобя в Parallel, преминавам към последователен билд
Ресурси:Входът към хиперлинк е видим.
|