Сравнение скорости арифметических операций в C#

В этом примере сравниваются скорости арифметических операций с разными типами данных. Существует большая разница между скоростями операций с использованием типа данных decimal и других типов, поэтому выполнение цикла требует определенного количества времени. Если цикл принимает разумное количество времени для int, то для decimal это занимает слишком много времени. И наоборот, если цикл принимает разумное количество времени для decimal, то слишком быстро получить большую часть измерений для других типов данных.

В этом примере используется другой подход, поэтому разумные измерения требуют разумного промежутка времени. Он позволяет ввести время, а затем проверяет операции на этот промежуток времени для каждого из типов данных.
Следующий код показывает, как программа проверяет тип данных decimal.

double sec_per_test = double.Parse(txtSecPerTest.Text);
DateTime start_time, stop_time, time_now;
TimeSpan elapsed;
double trials_per_sec, ns_per_trial;
...
// Десятичная дробь.
start_time = DateTime.Now;
stop_time = start_time.AddSeconds(sec_per_test);
for (int trial = 0; ; trial++)
{
    decimal i = 12345m * 54231m / 13m;
    decimal j = i * 267m;
    i = j / 287m;

    time_now = DateTime.Now;
    if (time_now > stop_time)
    {
        elapsed = time_now - start_time;
        trials_per_sec = trial / elapsed.TotalSeconds;
        txtDecimal.Text = trials_per_sec.ToString("N");
        txtDecimal.Refresh();

        ns_per_trial = 1.0 / trials_per_sec * 1000000000;
        txtDecimalSecs.Text = ns_per_trial.ToString("0.00000000");
        txtDecimalSecs.Refresh();
        break;
    }
}

Перед началом тестов программа считывает количество введенных секунд. Чтобы проверить тип данных decimal, он получает текущее время и добавляет желаемую длину теста к этому, чтобы получить требуемое время остановки.

Затем код вводится в цикл, который выполняется до вычисленного времени остановки. Внутри цикла код выполняет некоторые арифметические операции. Затем, если текущее время после желаемого времени остановки, программа отображает количество испытаний, выполняемых в секунду, и количество наносекунд, используемых каждой из арифметических операций.

Код для других типов данных аналогичен.

Если вы посмотрите на результаты, вы увидите, что decimal намного медленнее, чем остальные, что занимает почти в три раза больше. Другие операторы имеют сопоставимую производительность.

Источник: http://csharphelper.com/blog/2016/07/compare-speeds-arithmetic-operations-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector