Вы можете использовать подход, описанный здесь http://www.codeproject.com/KB/dotnet/ExecutionStopwatch.aspx
который использует системную функцию GetThreadTimes
http://msdn.microsoft.com/en-us/library/ms683237(v=vs.85).aspx
Время ожидания - это разница между общим временем и временем выполнения.
Добавлено:
Мне нравится использовать одноразовый класс для измерения производительности - он сохраняет код чистым (например, использование жестко запрограммированной консоли):
public class ThreadPerformance : IDisposable
{
private Stopwatch _totalStopwatch = new Stopwatch();
private ExecutionStopwatch _executionStopwatch = new ExecutionStopwatch();
public static ThreadPerformance Measure()
{
return new ThreadPerformance();
}
private ThreadPerformance()
{
_totalStopwatch.Start();
_executionStopwatch.Start();
}
public void Dispose()
{
_executionStopwatch.Stop();
_totalStopwatch.Stop();
Console.WriteLine("Performance mesurement for thread {0}", Thread.CurrentThread.ManagedThreadId);
Console.WriteLine("Waiting: {0}", _totalStopwatch.Elapsed - _executionStopwatch.Elapsed);
Console.WriteLine("CPU usage: {0}", _executionStopwatch.Elapsed);
}
}
Использование очень просто:
static void ThreadProc()
{
using (ThreadPerformance.Measure())
{
// do some calculations and waitings here
}
}