• C# 监视程序耗时

    2014-02-08 15:18:14
    转自:测试代码的运行时间(C#) ...使用以下方法可以准确的记录代码运行的耗时。 System.Diagnostics.Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); // 开始监视代码运行时间 // you code .... sto

    转自:测试代码的运行时间(C#)

    使用以下方法可以准确的记录代码运行的耗时。
               System.Diagnostics.Stopwatch stopwatch = new Stopwatch();
                stopwatch.Start(); //  开始监视代码运行时间
                //  you code ....
                stopwatch.Stop(); //  停止监视
                TimeSpan timespan = stopwatch.Elapsed; //  获取当前实例测量得出的总时间
                double hours = timespan.TotalHours; // 总小时
                double minutes = timespan.TotalMinutes;  // 总分钟
                double seconds = timespan.TotalSeconds;  //  总秒数
                double milliseconds = timespan.TotalMilliseconds;  //  总毫秒数


    展开全文
  • C#中如何监控耗时

    2019-07-16 18:32:55
    C#中如何监控耗时 Stopwatch sw = new Stopwatch(); sw.Start(); // Do something... sw.Stop(); double timeSpent = sw.ElapsedMilliseconds;

    C#中如何监控耗时

    Stopwatch sw = new Stopwatch();
    sw.Start();
    // Do something...
    sw.Stop();
    double timeSpent = sw.ElapsedMilliseconds;
    
    展开全文
  • 我们有很多种方法评估一个方法的执行耗时,比如使用性能分析工具,使用基准性能测试。不过传统的在代码中编写计时的方式依然有效,因为它可以生产环境或用户端得到真实环境下的执行耗时。 如果你希望在 .NET/C# 代码...

    我们有很多种方法评估一个方法的执行耗时,比如使用性能分析工具,使用基准性能测试。不过传统的在代码中编写计时的方式依然有效,因为它可以生产环境或用户端得到真实环境下的执行耗时。

    如果你希望在 .NET/C# 代码中编写计时,那么阅读本文可以获得一些建议。阅读本文也可以了解到 QueryPerformanceCounterGet­System­Time­As­File­Time 等方法的差异。


    基本的计时

    计时一般采用下面这种方式,在方法执行之前获取一次时间,在方法结束之后再取得一次时间。

    // 在方法开始之前。
    Foo();
    // 在方法执行之后。
    

    这样,前后两次获取的时间差即为方法 Foo 的执行耗时。

    这里我不会提到性能测试工具或者基准性能测试这些方法,因为这些测试代码不会运行于用户端。你可以阅读以下博客获得这两者的使用:

    结论:使用什么方法计时

    先说结论:System.Diagnostics 命名空间下有一个 Stopwatch 类。如果你要为你方法的执行时间进行统计,那么就使用这个类。

    Stopwatch 类有一些静态属性、也有一些实例方法和实例属性。此类型的时间统计是按照高性能和高精度的要求来做的,于是你可以用它获得高精度的计时效果。不过,如果你对性能要求近乎苛刻,例如你的方法会被数百万次或更高频地执行,那么就需要开始斟酌如何调用里面的属性了。

    简单的使用如下面这样:

    var watch = Stopwatch.StartNew();
    Foo();
    watch.Stop();
    var elapsed = watch.Elapsed;
    

    当然,你也可以直接使用 Stopwatch 的构造函数,new 出来之后再 Start,不过 StartNew 静态方法可以将两句合并为一句。

    各种计时 API 及其比较

    计时还有很多的方法,你可以针对不同需求场景使用不同的方法。不过,如果你根本没有了解过其他方法的话,那么建议直接使用上面的 Stopwatch,不要想太多。

    现在,我们看看 Windows 下的计时还有哪些 API:

    • 基于 QPC 的高精度 API
      • Query­Performance­Counter
      • Query­Performance­Frequency
    • 基于系统时间的非高精度 API
      • Get­Tick­Count, Get­Tick­Count64
      • Get­Message­Time
      • Get­System­Time, Get­Local­Time, Get­System­Time­As­File­Time
      • Query­Interrupt­Time, Query­Unbiased­Interrupt­Time
    • 基于 QPC 和系统时间的 API
      • Get­System­Time­Precise­As­File­Time
      • Query­Interrupt­Time­Precise, Query­Unbiased­Interrupt­Time­Precise

    基于系统性能计数器(QPC)的 API

    QueryPerformanceCounter,微软文档中把它称之为 QPC。

    一般情况下使用的 QueryPerformanceCounter,内核驱动开发者使用的 KeQueryPerformanceCounter 和 .NET 开发者使用的 System.Diagnostics.Stopwatch 都是基于 QPC 的 API。

    QPC 是通过计算机上独立运行的高精度硬件计时模块来获得时间戳的。这意味着,使用此 API 获得的时间戳是本机时间戳,不包含任何时区等信息。

    由于 QPC 的高精度特性,所以非常适合在单个设备上测量一个小段时间的时间间隔。而这也符合我们本文一开始说到的方法执行耗时测量需求。

    QueryPerformanceCounter 得到的值是 Ticks,单位是 100 ns。

    1 tick  = 100 ns
    1 us    = 1000 ns
    1 ms    = 1000 us
    1 s     = 1000 ms
    

    基于系统时间的 API

    如果你的需求不止是测量获取一个时间间隔,而是需要一个长期保存的时间,或者需要将时间与其他设备进行通信,那么基于单台设备的 QPC 就不符合要求了。

    GetSystemTimeAsFileTime 可以用来获取系统时钟时间。这个时间就是基于系统时钟的,所以如果你的时间戳是用来通信的,那么就很有用。当然,如果要在设备之间进行与时间信息相关的同步,还可能需要使用 NTP(Network Time Protocol)先同步时间。

    DateTime.Now 获取时间的方法就是这个:

    [MethodImplAttribute(MethodImplOptions.InternalCall)]
    internal static extern long GetSystemTimeAsFileTime();
    

    这里有一些比较有趣的说法,基于系统时间的 API 也会说成是获取高精度时间,那么跟 QPC 有什么不同呢?

    这里我只能拿英文来说话了。来自微软的 Raymond Chen 在它的 The Old New Thing 一书中说,基于系统时间的 API 获取的时间戳精度用的是 “所谓的 Precise”,但实际上应该称之为 “Accurate”,而 QPC 才能称之为实质上的 “Precise”。纠结起来就是 QPC 比基于系统时间的 API 得到的时间戳精度更高。

    基于 QPC 和系统时间的 API

    Get­System­Time­Precise­As­File­Time 这些 API 既可以获得 QPC 的高精度,又与系统时钟相关,于是你可以使用这些 API 同时获得以上测量的好处。当然,这以性能成本为代价的。


    参考资料

    展开全文
  • using System; using System.Diagnostics; using System.Net.Http; using System.Threading; using System.Threading.Tasks; using System.Web.Http.Controllers; using System.Web.Mvc;namespace Mall.Site { ///
    using System;
    using System.Diagnostics;
    using System.Net.Http;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Web.Http.Controllers;
    using System.Web.Mvc;
    
    namespace Mall.Site
    {
    
        /// <summary>
        /// 执行耗时监测
        /// </summary>
        public class StopwatchFilter : ActionFilterAttribute
        {
            Stopwatch wat = new Stopwatch();
            Stopwatch swAsync = new Stopwatch();
    
            public override void OnActionExecuted(ActionExecutedContext filterContext)
            {
                swAsync.Stop();
                if (swAsync.ElapsedMilliseconds>0)
                {
                    string msg = string.Format("页面{0},线程id={1},Action执行时间{2}毫秒", filterContext.HttpContext.Request.RawUrl, Thread.CurrentThread.ManagedThreadId, swAsync.ElapsedMilliseconds);
                    FrameWork.log4net.LogHelper.LogInfo(msg);
                }       
            }
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                swAsync.Reset();
                swAsync.Start();
            }
    
    
            public override void OnResultExecuted(ResultExecutedContext filterContext)
            {
                wat.Stop();
                if (wat.ElapsedMilliseconds>0)
                {               
                    string msg = string.Format("页面{0},线程id={1},View执行时间{2}毫秒", filterContext.HttpContext.Request.RawUrl, Thread.CurrentThread.ManagedThreadId, wat.ElapsedMilliseconds);
                    FrameWork.log4net.LogHelper.LogInfo(msg);
                }   
            }
            public override void OnResultExecuting(ResultExecutingContext filterContext)
            {
                wat.Reset();
                wat.Start();
            }        
        }
    }
    展开全文
  • DateTime start = DateTime.Now; //一些有趣的耗时的代码... TimeSpan spn = DateTime.Now - start; MessageBox.Show("耗时:"+spn.ToString()); 虽然简单,简单的反而容易忘记。 记一笔。 参...
                DateTime start = DateTime.Now;
    //一些有趣的耗时的代码...
    TimeSpan spn = DateTime.Now - start;
    MessageBox.Show("耗时:"+spn.ToString());

    虽然简单,简单的反而容易忘记。

    记一笔。

     

    参考:http://www.wxzzz.com/?id=25

    转载于:https://www.cnblogs.com/andrew-blog/archive/2011/12/02/CSharp_TimeSpan.html

    展开全文
  • //监控性能需引用 System.DiagnosticsStopwatch stopwatch = new Stopwatch();stopwatch.Start(); // 开始监视代码运行时间。。。//内容。。。stopwatch.Stop(); // 停止监视TimeSpan timespan = stopwatch.Elapsed;...
  • 做的小demo,可以实现多个进程的监控监控的判断是进程的路径为基准,xml文件实现自由配置。
  • 实现对程序池资源监控:CPU占用率、GC监控及邮件预警,帮助做性能分析,错误报警页面展示如下:1. 展示当前各个程序池的CPU占用率2. 展示监控的程序池的cpu占用率图表3. 程序池配置list4. 程序池监控配置详情页:5. ...
  • 如:记录调用参数,返回值,方法执行耗时等等。如果直接在方法的前后加入代码,如下:  1 public int F(int a, string s) 2 { 3 var now = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff...
  • .net 简单统一监控平台,用于集群的性能监控,应用耗时监控管理,统一日志管理等多维度的性能监控分析。 集群的性能监控:(需要服务器部署监控节点) 1. 目前仅支持windows服务器监控, 2. 支持windows自带的性能...
  • static void read() { file = new FileStream(@"C:\Users\Administrator\Desktop\io.txt", FileMode.Open); StreamReader sr = new StreamReader(file); while (sr.ReadLine()!... ------------------------...
  • 监控IIS的运行状态

    2019-01-06 16:40:14
    IIS经常出现假死的情况,具体什么时候会出现假死,我就不说了,今天我要写的是如何监控IIS的状态。 程序的功能是:如果IIS是为运行的状态,就重启IIS,如果IIS的连接数达到了设置的连接数,也重启IIS。我写了一个...
  • 在Nuget引用 Castle.DynamicProxy 和Newtonsoft.Json 这个 原文:... 代码: ...using Castle.Core.Interceptor;...using Castle.DynamicProxy...
  • C#写性能服务器

    2020-07-12 01:05:10
    耗时3004.6325 秒完成 总共 10,000,000 一千万次访问 平均每分完成 199,691.6 次发送与接收 平均每秒完成 3,328.2 次发送与接收 整个运行过程中,内存消耗在开始两三分种后就保持稳定不再增涨。 看了一下对每个...
  • Asp.net MVC Filter监控View实例,监控每个View页面加载的时间,跟踪分析每个页面的加载性能,然后做进一步优化; 问题背景 最近,客户一直反馈系统使用慢,有时候能够指出具体是哪个页面,有时候又只是笼统地...
  • C#记录运行时间以及系统调试时查看调试参数的方法 Stopwatch sw = new Stopwatch(); sw.Start(); //... sw.Stop(); //以下两种方法均需要打开输出窗口查看 System.Diagnostics.Trace.WriteLine(&...
  • # BackgroundWorker 控件的几个实例(C# backgroundworker使用方法): 在 WinForms 中,有时要执行耗时的操作,在该操作未完成之前操作用户界面,会导致用户界面停止响应。 解决的方法就是新开一个线程,把耗时...
  • 一开始还没注意,当看到里面的一个注释的方法时,一开始还以为自己复制错了代码,结果仔细一看网页的文章,我去,原来是自己写的,写的确实不咋地。 把自己的文章的代码复制了下来,稍微改了一下,运行看了一下效果...
  • 1、NProfiler,这是一个商业软件,有试用周期,可以监测包括Winform在内的各种C#应用,CPU、耗时监测非常详细,可以具体到函数、代码级别 2、有时我们查看当前的web应用正在处理的请求,可以通过AppCmd.exe进行: ...
  • 接口耗时打印并统计

    2019-07-21 00:36:03
    1.可以利用Tomcat的access-log日志,让其打印出http请求的每次耗时。可以在 config/server.xml里Host标签下配置tomcat访问日志格式 <Valve className="org.apache.catalina.valves.AccessLogValve" directory=...
1 2 3 4 5 ... 20
收藏数 2,419
精华内容 967