Проблемы с запуском секундомера - PullRequest
0 голосов
/ 14 марта 2020

У меня есть c# программа, которая проверяет алгоритм сортировки и его производительность, используя экземпляр класса Stopwatch.

Пока все работает правильно, и я получаю ожидаемые результаты тиков, за исключением первого запуска.
Каким-то образом классу Секундомера требуется на 900 тиков больше для первого расчета.

Должен ли я инициировать класс секундомера как-то иначе или есть ли способ это исправить?

static void Main() {
    watch = new Stopwatch();

    int amount = 10; // Amount of arrays to test
    long[, ] stats= new long[3, amount]; // Array that stores ticks for every size (100,1000,10000) 'amount'-times
    for (int size = 100, iteration = 0; size <= 10000; size *= 10, iteration++) {
        for (int j = 0; j < amount; j++) {
            stats[iteration, j] = TestSort(size); // Save ticks for random tested array in stats
        }
    }
    PrintStats(stats);

}

public static long TestSort(int length) {
    int[] testArray = GenerateRandomArray(length); // Generate a random array with size of length

    watch.Reset();
    watch.Start();
    sort(testArray);
    watch.Stop();

    return watch.ElapsedTicks;
}

public static void PrintStats(long[, ] array) {

    for (int i = 0; i < array.GetLength(0); i++) {
        Console.Write("[");
        for (int j = 0; j < array.GetLength(1); j++) {
            Console.Write(array[i, j]);
            if (j < array.GetLength(1) - 1) {
                Console.Write(",");
            }
        }
        Console.Write("]\n");
    }
}

// Sample output
// Note that first entry is about 900 ticks longer then the other ones with size 100
[1150,256,268,262,261,262,263,261,263,262]
[19689,20550,20979,22953,19913,20578,19693,19945,19811,19970]
[1880705,1850265,3006533,1869953,1900301,1846915,1840681,1801887,1931206,2206952]
...