Re[16]: Регресс производительности при переходе с FW 3.5 SP1
От: 4058  
Дата: 16.05.20 21:31
Оценка: 18 (1)
Здравствуйте, Serginio1, Вы писали:

S> Ну ты так и не привел тест с IndexOf.

S> И можешь сравнить тесты "маркентологов". Опровергни...

Это совершенно не то, что обсуждалось в исходном сообщении, но на данной "синтетике" Core всех "порвал":

using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        StrBench(1000000);
    }

    static void StrBench(int arrSize)
    {
        const int cnt = 10;

        List<string> arr = new List<string>(arrSize);
        for (int j = 0; j < arrSize; j++)
            arr.Add(string.Format("{0}{1}{2}", new string('Ё', 100), BuildKey(j), new string('x', 100)));

        string key = arr[arr.Count - 1];
        int c = 0;

        var sw = new System.Diagnostics.Stopwatch();
        sw.Start();

        for (int i = 0; i < cnt; i++)
            c += arr.IndexOf(key);

        double ts = sw.Elapsed.TotalSeconds;
        ulong total = (ulong)arrSize * (ulong)cnt;

        Console.WriteLine("String ({3}) {0} op / {1:0.000} sec = {2:0}", total, ts, total / ts, arrSize);
    }

    static string BuildKey(int i)
    {
        return i.ToString().PadLeft(10, '0');
    }
}


FW 3.5: String (1000000) 10000000 op / 0,689 sec = 14503480
FW 4.0: String (1000000) 10000000 op / 0,315 sec = 31732603
Core31: String (1000000) 10000000 op / 0,291 sec = 34337193

Core31 и FW 4.0 почти равны, 3.5 далеко в хвосте ...

Теперь по int-ам:

using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        IntBench(1000000);
    }

    static void IntBench(int arrSize)
    {
        const int cnt = 1000;

        List<int> arr = new List<int>(arrSize);
        for (int j = 0; j < arrSize; j++)
            arr.Add(j);

        int key = arrSize - 1;
        int c = 0;

        var sw = new System.Diagnostics.Stopwatch();
        sw.Start();

        for (int i = 0; i < cnt; i++)
            c += arr.IndexOf(key);

        double ts = sw.Elapsed.TotalSeconds;
        ulong total = (ulong)arrSize * (ulong)cnt;

        Console.WriteLine("String ({3}) {0} op / {1:0.000} sec = {2:0}", total, ts, total / ts, arrSize);
    }
}


FW 3.5: String (1000000) 1000000000 op / 1,619 sec = 617788936
FW 4.0: String (1000000) 1000000000 op / 0,630 sec = 1586526708
Core31: String (1000000) 1000000000 op / 0,278 sec = 3593765105

Core31 по отношению к FW 4.0 выдал профит в 2.3 (!), и почти в 6-ть раз по отношению к FW 3.5.

P.S. Интересно с чем эти "маркетологи" сравнивали Core.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.