Чтобы точно измерить время выполнения куска кода, в .NET для этого предусмотрен специальный класс Stopwatch.
Пример (С#):
using System.Diagnostics;
Stopwatch swatch = new Stopwatch(); // создаем объект
swatch.Start(); // старт
// код
swatch.Stop(); // стоп
Console.WriteLine(swatch.Elapsed); // результат
Можно так же измерить с помощью текущего времени DateTime.Now, поставив его в начало и в конец кода, а затем вычесть разницу. Но такой замер будет менее точным.
Для QueryPerformanceCounter существует баг, в котором счетчик может прыгнуть вперед вплоть до нескольких секунд. А GetTickCount правильный, но там точность до миллисекунд.
http://support.microsoft.com/kb/274323
Хотя, не знаю, как с этим в Stopwatch, в документации об этом не написано.
Любое копирование информации с этого сайта - только со ссылкой на источник. Это в одинаковой мере распространяется на любую авторскую информацию в интернете.
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