Сайт | Лаборатория | Форум | Wikiservia



In english

harpywar.com

Главная

Вики

Форум

Лаборатория

 Статьи
   Игры
   Настройка серверов
     PvPGN
     D2GS
     NFS: U
     Apache
     ArcEmu

   Кодинг
     .NET
     PHP

   Разное

 Проекты
   QDoom
   IRC Search
   vbreality [web]
   UTech p2p Realm [web]
   PvPGN система статистики
   Diablo 2 Launcher
   WoW Simple Launcher

 Моё
   Творчество
   Оборудование

Поиск по сайту


Хостинг и VDS, скидка при переходе
 
VB.NET ↔ C# отличия
Измерение времени выполнения кода
InputBox в C#
Извлечение версии программы (сборки)
Измерение времени выполнения кодаСоздано: 24.02.2010
Изменено: 24.02.2010
Автор: HarpyWar

Чтобы точно измерить время выполнения куска кода, в .NET для этого предусмотрен специальный класс Stopwatch.

Пример (С#):
  1. using System.Diagnostics;   
  2.   
  3. Stopwatch swatch = new Stopwatch(); // создаем объект   
  4. swatch.Start(); // старт   
  5.   
  6. // код   
  7.   
  8. swatch.Stop(); // стоп   
  9. Console.WriteLine(swatch.Elapsed); // результат  

Можно так же измерить с помощью текущего времени DateTime.Now, поставив его в начало и в конец кода, а затем вычесть разницу. Но такой замер будет менее точным.

 Stranger
06 Август 2010, 12:39 | #282 
Наиболее точное измерение можно получить через апишные функции
using System;

namespace PerfCounter {

/// <summary>
/// Этот класс предоставляет "секундомер" для приложений,
/// требующих точного измерения времени
/// </summary>
public class Counter
{

[System.Runtime.InteropServices.DllImport("KERNEL32")]
private static extern bool QueryPerformanceCounter(ref
long lpPerformanceCount);

[System.Runtime.InteropServices.DllImport("KERNEL32")]
private static extern bool
QueryPerformanceFrequency(ref long lpFrequency);

long totalCount = 0;
long startCount = 0;
long stopCount = 0;
long freq = 0;

public void Start()
{
startCount = 0;
QueryPerformanceCounter(ref startCount);
}

public void Stop()
{
stopCount = 0;
QueryPerformanceCounter(ref stopCount);
totalCount += stopCount - startCount;
}

public void Reset()
{
totalCount = 0;
}

public float TotalSeconds
{
get
{
freq = 0;
QueryPerformanceFrequency(ref freq);
return((float) totalCount / (float) freq);
}
}

public double MFlops(double total_flops)
{
return (total_flops / (1e6 * TotalSeconds));
}

public override string ToString()
{
return String.Format("{0:F3} seconds", TotalSeconds);
}
}
}

см. http://www.microsoft.com/Rus/Msdn/Magazine/2004/03/ScienceComputing.mspx

 HarpyWar
06 Август 2010, 16:15 | #283 
Для QueryPerformanceCounter существует баг, в котором счетчик может прыгнуть вперед вплоть до нескольких секунд. А GetTickCount правильный, но там точность до миллисекунд.
http://support.microsoft.com/kb/274323

Хотя, не знаю, как с этим в Stopwatch, в документации об этом не написано.

 basman
26 Декабрь 2013, 20:41 | #366 
Stopwatch работает с апи функциями QueryPerformanceCounter и QueryPerformanceFrequency
зачем ты велосипед сделал? :)


Есть вопросы по настройке игровых серверов? Добро пожаловать на форум!

Имя: Проверка: = 3149


© 2006—2017, HarpyWar

Любое копирование информации с этого сайта - только со ссылкой на источник.
Это в одинаковой мере распространяется на любую авторскую информацию в интернете.