gpt4 book ai didi

c# - 如何衡量 .NET 中托管线程的性能

转载 作者:可可西里 更新时间:2023-11-01 08:48:27 25 4
gpt4 key购买 nike

我想测量托管 (.NET) 线程的性能。具体来说,我需要测量以下 -

  1. 线程使用 CPU 多长时间?

  2. 它保持阻塞多长时间(等待远程方法调用完成)?

使用 System.Diagnostic.StopWatch 没有帮助,因为它读取操作系统/硬件的高分辨率性能计时器功能,其中可能包括并行运行和共享同一 CPU 的其他线程消耗的时间。

最佳答案

您可以使用此处描述的方法 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
}
}

关于c# - 如何衡量 .NET 中托管线程的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4745979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com