Сравнение производительность типов данных int, long и byte в C#

Пример Сравните производительность типов float, double и decimal в C# , сравнивает производительность float, double и decimal . В этом примере выполняется аналогичное тестирование для типов данных int, long и byte.

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

// Сравнение характеристик.
private void btnGo_Click(object sender, EventArgs e)
{
    txtTimeFloat.Clear();
    txtTimeInt.Clear();
    txtTimeLong.Clear();
    txtTimeByte.Clear();
    Cursor = Cursors.WaitCursor;
    Refresh();

    int num_trials = int.Parse(txtNumTrials.Text);
    Stopwatch watch = new Stopwatch();
    float float1, float2, float3;
    int int1, int2, int3;
    long long1, long2, long3;
    byte byte1, byte2, byte3;

    watch.Start();
    int float_trials = num_trials / 10;
    for (int i = 0; i < num_trials; i++)
    {
        float1 = 1.23f;
        float2 = 4.56f;
        float3 = float1 / float2;
    }
    watch.Stop();
    txtTimeFloat.Text = "~" +
        (10 * watch.Elapsed.TotalSeconds).ToString() + " sec";
    txtTimeFloat.Refresh();

    watch.Reset();
    watch.Start();
    for (int i = 0; i < num_trials; i++)
    {
        int1 = 7331;
        int2 = 1337;
        int3 = int1 / int2;
    }
    watch.Stop();
    txtTimeInt.Text =
        watch.Elapsed.TotalSeconds.ToString() + " sec";
    txtTimeInt.Refresh();

    watch.Reset();
    watch.Start();
    for (int i = 0; i < num_trials; i++)
    {
        long1 = 73317331;
        long2 = 13371337;
        long3 = long1 / long2;
    }
    watch.Stop();
    txtTimeLong.Text =
        watch.Elapsed.TotalSeconds.ToString() + " sec";
    txtTimeLong.Refresh();

    watch.Reset();
    watch.Start();
    for (int i = 0; i < num_trials; i++)
    {
        byte1 = 231;
        byte2 = 123;
        byte3 = (byte)(byte1 / byte2);
    }
    watch.Stop();
    txtTimeByte.Text =
        watch.Elapsed.TotalSeconds.ToString() + " sec";
    txtTimeByte.Refresh();

    Cursor = Cursors.Default;
}

Самая интересная часть кода выполняет простую математическую операцию внутри циклов для каждого из типов данных. Программа также выполняет аналогичный цикл для типа данных float для сравнения. Поскольку цикл float намного медленнее, чем те, которые используют другие типы данных, код делит число итераций на 10 для float, а затем умножает прошедшее время на 10 .

Перед запуском программы я подумал, что int будет быстрее, чем long, но я не ожидал, что int займет только третью пока long. Я также не ожидал, что тип данных byte будет иметь примерно такую же производительность, как тип данных int.

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

Источник: http://csharphelper.com/blog/2017/05/compare-the-performance-of-the-int-long-and-byte-data-types-in-c/

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