@SergeySerge11

Как пользоваться BenchmarkDotNet? Почему пример из get started минут 10 выполнялся????

core 6.0
И почему у меня в консоль Триллион строк текста пишет, Тогда как мне нужна просто, только таблица.
Во всех примеров у всех таблица выводиться, у меня, после часа ожидания и вот таких строк
// *** Execute ***
// Launch: 1 / 1
// Execute: dotnet 8f9f0e15-6ccc-44c3-9ed4-c874be70776a.dll --benchmarkName "Bench.Sleeps.Time50(T: 50)" --job IterationCount=1 --benchmarkId 0 in C:\Users\danii\source\repos\VSM\Bench\bin\Release\net6.0\8f9f0e15-6ccc-44c3-9ed4-c874be70776a\bin\Release\net6.0
// BeforeAnythingElse

// Benchmark Process Environment Information:
// Runtime=.NET 6.0.7 (6.0.722.32202), X64 RyuJIT AVX2
// GC=Concurrent Workstation
// HardwareIntrinsics=AVX2,AES,BMI1,BMI2,FMA,LZCNT,PCLMUL,POPCNT VectorSize=256
// Job: Job-PDKXUI(IterationCount=1)

OverheadJitting 1: 1 op, 573100.00 ns, 573.1000 us/op
WorkloadJitting 1: 1 op, 371700.00 ns, 371.7000 us/op

OverheadJitting 2: 16 op, 491300.00 ns, 30.7062 us/op
WorkloadJitting 2: 16 op, 642500.00 ns, 40.1562 us/op

WorkloadPilot 1: 16 op, 1000.00 ns, 62.5000 ns/op
WorkloadPilot 2: 32 op, 1400.00 ns, 43.7500 ns/op
WorkloadPilot 3: 64 op, 2000.00 ns, 31.2500 ns/op
WorkloadPilot 4: 128 op, 1600.00 ns, 12.5000 ns/op
WorkloadPilot 5: 256 op, 1900.00 ns, 7.4219 ns/op
WorkloadPilot 6: 512 op, 2800.00 ns, 5.4688 ns/op
... Больше миллиона наверное.

И только в самом конце таблица.

Вот стартовый код, уже даже без кода пустые методы. (Добавил [BenchmarkDotNet.Attributes.IterationCount(1)] не знаю точно, что значат, но и без них так же ждать вечность )
// Пока писал, вопорос, даже этот код еще не выполнился???? Почему он зависает на вечность?
using System;
using System.Security.Cryptography;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;

namespace Bench
{

    [DisassemblyDiagnoser(maxDepth: 1)] // change to 0 for just the [Benchmark] method
    [MemoryDiagnoser(displayGenColumns: false)]
    public class Sleeps
    {
        [BenchmarkDotNet.Attributes.IterationCount(1)]
        [Benchmark]
        public void Time50()  {}// Thread.Sleep(50);
    [BenchmarkDotNet.Attributes.IterationCount(1)]
    [Benchmark(Baseline = true)]
    public void Time100()  {}// Thread.Sleep(100);
        [BenchmarkDotNet.Attributes.IterationCount(1)]
        [Benchmark]
        public void Time150() { } //=> Thread.Sleep(150);
  
        [Params(50, 100, 150)]
        public int T { get; set; }
        [BenchmarkDotNet.Attributes.IterationCount(1)]
        [Benchmark]
        public void Sleep() { } //=> Thread.Sleep(T);
    }

    public class Program
    {
        public static void Main(string[] args)
        {
            BenchmarkRunner.Run<Sleeps>();
           // var summary = BenchmarkRunner.Run<Md5VsSha256>( );
 
         
           // var summary2 = BenchmarkRunner.Run<LookupSpeed>();
             
        }
    }
}


И как оно вообще работает, точнее чем отличается от Stopwatch(), точнее чем лучше, кроме того что не надо писать лишних 20-30 строчек?
  • Вопрос задан
  • 188 просмотров
Решения вопроса 1
Это необходимо для сбора статистики.
На выходе у тебя будет нормальный график с распределением времени выполнения.

От stopwatch это отличается тем, что:
1. Предварительно происходит прогрев, чтобы тестировать код после всех оптимизаций.
2. Код запускается очень много раз, чтобы собрать статистические данные
3. В процессе ещё собирается информация об использовании памяти
4. В результате ты получаешь подробный отчёт, по которому можно сравнить разные варианты
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы