当前位置:首页 > C#编程 > C#/.net框架 > 正文内容

C#测量程序运行时间及cpu使用时间

Jorge2年前 (2022-05-08)C#/.net框架755

对一个服务器程序想统计每秒可以处理多少数据包,要如何做?答案是用处理数据包的总数,除以累记处理数据包用的时间。这里要指出的是, 运行一段程序,使用的cpu时间,跟实际运行的时间是不一样的。

附例如下:

C#
private void ShowRunTime() {
            TimeSpan ts1 = Process.GetCurrentProcess().TotalProcessorTime;
            Stopwatch stw = new Stopwatch();
            stw.Start();
            int Circles = 1000;
            for (int i = 0; i < Circles; ++i)
            {
                Console.WriteLine(i.ToString());
            }
            double Msecs = Process.GetCurrentProcess().TotalProcessorTime.Subtract(ts1).TotalMilliseconds;
            stw.Stop();
            Console.WriteLine(string.Format("循环次数:{0} CPU时间(毫秒)={1} 实际时间(毫秒)={2}", Circles, Msecs, stw.Elapsed.TotalMilliseconds, stw.ElapsedTicks));
            Console.WriteLine(string.Format("1 tick = {0}毫秒", stw.Elapsed.TotalMilliseconds / stw.Elapsed.Ticks));}

程序输出如下:

    循环次数:1000 CPU时间(毫秒)=50.072 实际时间(毫秒)=666.9071
    1 tick = 0.0001毫秒

可以看出在这个例子中,两者差距比较大,其原因如下:

1)Windows是多任务操作系统,按照线程为单位对cpu时间轮询分配。即一个程序运行的中途,可能被剥夺cpu资源,供其他程序运行。

2)程序本身会有不占用cpu时间的等待过程。这个等待可能是我们程序主动的,比如启动一个进程,然后等待进程的结束;也可能是我们没有意识到的,如例子 的Console.WriteLine方法,猜想其内部进行了一系列的异步I/O操作然后等待操作的完成,这其间并没有占用调用进程的cpu时间,但耗费 了很多等待时间。

总结:

    1)性能的测量,应该用程序运行时间来测量,当然也需要使用cpu时间作为参考,如果两者差距很大,需要考虑为何出现这种情况。

    2).Net的Stopwatch类可以精确到1/10000毫秒,基本可以满足测量精度。


#转载请注明出处 www.skcircle.com 《少有人走的路》勇哥的工业自动化技术网站。


扫描二维码推送至手机访问。

版权声明:本文由7点博客发布,如需转载请注明出处。

本文链接:http://6dot.cn/?id=46

标签: .NET.NET框架
分享给朋友:

“C#测量程序运行时间及cpu使用时间” 的相关文章

细说进程、应用程序域与上下文之间的关系(四)——进程应用程序域与线程的关系

细说进程、应用程序域与上下文之间的关系(四)——进程应用程序域与线程的关系

目录一、进程的概念与作用二、应用程序域三、深入了解.NET上下文四、进程应用程序域与线程的关系 四、进程、应用程序域、线程的相互关系4.1 跨AppDomain运行代码在应用程序域之间的数据是相对独立的,当需要在其他AppDomain当中执行当前 AppDomain中的程序集代码时,可以使...

细说进程、应用程序域与上下文之间的关系(一)——进程的概念与作用

细说进程、应用程序域与上下文之间的关系(一)——进程的概念与作用

引言本文主要是介绍进程(Process)、应用程序域(AppDomain)、.NET上下文(Context)的概念与操作。虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提高系统的性能有莫大的帮助。在本篇最后的一节当中将会介绍到三者与线程之间的关系,希望对多线程开发人员能提供...

C# 外观模式(Facade)举一个例子

C# 外观模式(Facade)举一个例子

 有关外观模式见下面贴子,下面编写的一个例子。FundClass.csC#using System;using System.Collections.Generic;using System.Linq;using System.Text;namesp...

C# winform下的一个mvc例子

C# winform下的一个mvc例子

 资源列表:业务逻辑BLLC#using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace student{ &nb...

C# 事件总线 EventBus

C# 事件总线 EventBus

 1. 引言事件总线这个概念对你来说可能很陌生,但提到观察者(发布-订阅)模式,你也许就很熟悉。事件总线是对发布-订阅模式的一种实现。它是一种集中式事件处理机制,允许不同的组件之间进行彼此通信而又不需要相互依赖,达到一种解耦的目的。我们来看看事件总线的处理流程:了解了事件总线的基本概念和处...

C# 事件委托妙文

C# 事件委托妙文

 委托和事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在。本文中,我将通过两个范例由浅入深地讲...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。