Скопируйте массивы быстро в C#

Для копирования массива достаточно просто использовать цикл для, но для большинства массивов вы можете получить еще лучшую производительность, используя Array класс Copy . Это принимает в качестве параметров исходный и целевой массивы. Третий параметр указывает, сколько записей нужно копировать. Дополнительные параметры позволяют копировать из одной части исходного массива в другую часть целевого массива.

Следующий код сравнивает время, необходимое для копирования целочисленного массива с помощью цикла for и с помощью Array.Copy.

// Запуск проб.
private void btnGo_Click(object sender, EventArgs e)
{
    lblForLoop.Text = "";
    lblArrayCopy.Text = "";
    Cursor = Cursors.WaitCursor;
    Application.DoEvents();

    int num_items = int.Parse(txtNumItems.Text);
    int num_trials = int.Parse(txtNumTrials.Text);

    int[] array1 = new int[num_items];
    int[] array2 = new int[num_items];

    // Инициализировать первый массив.
    for (int i = 0; i < num_items; i++)
    {
        array1[i] = i;
    }
    DateTime start_time, stop_time;
    TimeSpan elapsed;

    // Используйте цикл for.
    start_time = DateTime.Now;
    for (int trial = 0; trial < num_trials; trial++)
    {
        for (int i = 0; i < num_items; i++)
        {
            array2[i] = array1[i];
        }
    }
    stop_time = DateTime.Now;
    elapsed = stop_time - start_time;
    lblForLoop.Text = elapsed.TotalSeconds.ToString("0.00") +
        " seconds";
    Application.DoEvents();

    // Используйте Array.Copy.
    start_time = DateTime.Now;
    for (int trial = 0; trial < num_trials; trial++)
    {
        Array.Copy(array1, array2, array1.Length);
    }
    stop_time = DateTime.Now;
    elapsed = stop_time - start_time;
    lblArrayCopy.Text = elapsed.TotalSeconds.ToString("0.00") +
        " seconds";

    Cursor = Cursors.Default;
}

Код получает количество элементов, которые он должен копировать в каждом массиве, и количество испытаний, которое оно должно выполнить. Затем для каждого испытания код использует цикл for для копирования значений массива и отображения прошедшего времени. Затем он копирует значения с помощью Array.Copy. Код, который выполняет два типа испытаний, выделяется синим цветом.

Если вы посмотрите на изображение, показанное выше, вы увидите, что Array.Copy выполняется намного быстрее, в этом примере занимает около 1/17, если для .

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

Источник: http://csharphelper.com/blog/2015/05/copy-arrays-quickly-in-c/

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