Tag: performance testing

在.NET中使用PerformanceCounter来测量CPU使用率的正确方法

我想在Web服务中衡量业务类的性能。 我怎么能通过编码来做到这一点? 我想知道我的业务类消耗多少CPU来执行其操作,以及如果Web服务获得多个同时服务调用,性能如何变化。 我不想衡量我的网络服务的表现; 我只是想知道我的商务舱是如何表现的。 我的想法: 在阅读了一些博客之后,我决定编写一些代码来创建一个PerformanceCounter ,如下所示。 从该代码中,我可以在一个for循环中创建多个线程。 每个线程都会调用我的类。 在同一个for循环中,我将在计数器实例上调用NextValue()方法。 System.Diagnostics.PerformanceCounter CpuCounter = new System.Diagnostics.PerformanceCounter(); CpuCounter.CategoryName = “Process”; CpuCounter.CounterName = “% Processor Time”; CpuCounter.InstanceName = Process.GetCurrentProcess().ProcessName; 问题: 这种方法是否正确? 我应该使用“处理”类别还是“处理器”类别? 如何获取性能数据以创建一些报告? 例如,同时拥有100个线程,CPU使用率为70%,200个线程使用率达到90%等。 我的业务逻辑很快就结束了。 另一方面, NextValue()方法在本博客中提到的一秒间隔后给出正确的值。 我怎么处理这个? 有时, NextValue()方法给出的值大于100.这是否意味着CPU使用率超过100%? (我认为,此计数器的值不应解释为CPU的使用百分比。我是否正确?) 注意:我使用的是Windows 7 premium和Intel Core i5处理器。 这是我第一次使用性能计数器。 所以有些问题可能很愚蠢。

如何衡量等待异步操作的性能?

我有一个从多个MessageQueue实例读取的Windows服务。 这些消息队列都运行自己的Task来读取消息。 通常,在阅读消息后,I / O数据库的工作就完成了。 我发现文章声称在I / O操作上使用异步是个好主意,因为它可以释放线程。 我正在尝试模拟在控制台应用程序中使用异步I / O操作的性能提升。 控制台应用程序 在我的测试环境中,我有10个队列。 GetQueues()返回10个不同的MessageQueue实例。 static void Main(string[] args) { var isAsync = Console.ReadLine() == “Y”; foreach (var queue in queueManager.GetQueues()) { var temp = queue; Task.Run(() => ReceiveMessagesForQueue(temp, isAsync)); } while (true) { FillAllQueuesWithMessages(); ResetAndStartStopWatch(); while(!AllMessagesRead()) { Thread.Sleep(10); } Console.WriteLine(“All messages read in {0}ms”, stopWatch.ElapsedMilliseconds); […]