Автоматизация бизнеса

Пользовательский поиск

понедельник, 1 октября 2012 г.

C# оценка времени выполнения кода

В зависимости от требуемой точности оценку времени выполнения можно получить разными способами.

Измерение с помощью TickCount 

При этом способе точность получится наименьшая.
            int start = Environment.TickCount;
            // ваши действия
            int end = Environment.TickCount;
            Console.WriteLine("Ticks : " + (end-start)); //ваш результат

Измерение с помощью Ticks

В этом случай  вы получите более точный результат . Точность 100 наносекунд.
            long start = DateTime.Now.Ticks;
            // ваши действия
            long end = DateTime.Now.Ticks;
            Console.WriteLine("Ticks : " + (end-start)); //ваш результат

Измерение с помощью QueryPerformance

Самую высокую точность (1/3579545 секунды) можно получить данным способом.
      
       [System.Runtime.InteropServices.DllImport("kernel32.dll")]
        extern static short QueryPerformanceCounter(ref long x);
        [System.Runtime.InteropServices.DllImport("kernel32.dll")]
        extern static short QueryPerformanceFrequency(ref long x);
        long ctrl1 = 0, ctrl2 = 0, freq = 0;

и уже в вашем методе дополняете код .
// начало измерения
            if (QueryPerformanceCounter(ref ctrl1) != null)
            {
                // ваши действия
                
                // Завершение измерения
                QueryPerformanceCounter(ref ctrl2);
                QueryPerformanceFrequency(ref freq);
                Console.WriteLine("Минимальное разрешение : 1/" + freq + " сек.");
                Console.WriteLine("Время выполнения " + (ctrl2 - ctrl1) * 1 / freq + " сек.");
            }

3 комментария:

  1. Все три описанных решения неверные! Существуют стандартные специализированные решения для данных измерений, например System.Diagnostics.Stopwatch

    ОтветитьУдалить
    Ответы
    1. Выложите Ваш код пожалуйста!

      Удалить
    2. http://easy-c-sharp.blogspot.com/2012/09/c-list.html

      Удалить