dotnetBenchmark как готовить
От: okon  
Дата: 07.07.20 13:56
Оценка:
Хотелось померять скорость вставки строки в разных сценариях с обычной строкой, билдер без выделенного заранее буффера и билдер с буффером.
Если не настраивать параметры теста, то по умолчанию он начинает длинные танцы с бубном, я так и не дождался результата за 5 минут и не понятно когда ждать завершения — прервал.

Если настраивать на минимализм, то выдает результат быстро но не нравится погрешность результата
и немного странно что пустой метод работает медленнее чем вставка ( на самом деле высокая погрешность ), погрешность у вставки могу понять — требуется выделение памяти и оно сильно зависит от разных условий.
Но вот почему пустой метод имеет такую высокую погрешность не понятно.




|                          Method |     Mean |     Error |    StdDev |    Median |       Min |      Max |
|-------------------------------- |---------:|----------:|----------:|----------:|----------:|---------:|
|                       InsertStr | 41.84 us | 183.25 us | 121.21 us | 3.6000 us | 2.9000 us | 386.8 us |
|             InsertStringBuilder | 95.50 us | 446.81 us | 295.54 us | 1.8500 us | 0.7000 us | 936.6 us |
| InsertStringBuilderWithCapacity | 41.91 us | 192.41 us | 127.27 us | 1.4500 us | 0.7000 us | 404.1 us |
|                           Empty | 81.96 us | 390.78 us | 258.48 us | 0.2000 us | 0.1000 us | 817.6 us |



Вопрос — какие настройки оптимальны по точности и скорости выполнения теста ( хотелось чтобы тест выполнялся не более минуты )


    [SimpleJob(RunStrategy.ColdStart, launchCount: 1, warmupCount: 0, targetCount: 10)]
    [MinColumn, MaxColumn, MeanColumn, MedianColumn]
    public class BenchmarkTest
    {

        string str;
        StringBuilder stringBuilder;
        StringBuilder stringBuilderWithCapacity;

        const string baseStr = "1234567890";
        const int repeatCount = 10;

        public BenchmarkTest()
        {
            str = string.Join(string.Empty, Enumerable.Repeat(baseStr, repeatCount));
            stringBuilder = new StringBuilder(str);
            stringBuilderWithCapacity = new StringBuilder(baseStr.Length * (repeatCount + 1));
            stringBuilderWithCapacity.Append(str);
        }

        [Benchmark]
        public void InsertStr()
        {
            str.Insert(4, "5");
        }

        [Benchmark]
        public void InsertStringBuilder()
        {
            stringBuilder.Insert(4, "5");
        }

        [Benchmark]
        public void InsertStringBuilderWithCapacity()
        {
            stringBuilderWithCapacity.Insert(4, "5");
        }


        [Benchmark]
        public void Empty()
        {
        }
    }
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.