Как измерить производительность управляемого потока в .NET - PullRequest
11 голосов
/ 20 января 2011

Я хочу измерить производительность управляемого (.NET) потока.Чтобы быть конкретным, мне нужно измерить следующее -

  1. Как долго поток использует процессор?

  2. Как долго он оставался заблокированным (ожиданиезавершение удаленного вызова метода)?

Использование System.Diagnostic.StopWatch бесполезно, поскольку оно считывает функцию таймеров производительности с высоким разрешением ОС / оборудования, которая может включать время, затрачиваемое другими потокамиработает параллельно и совместно использует один и тот же процессор.

Ответы [ 2 ]

4 голосов
/ 20 января 2011

Вы можете использовать подход, описанный здесь 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
    }
}
0 голосов
/ 20 января 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...