欢迎光临
我们一直在努力

获取高精度的时间差,可以用来分析页面运行时间的长短-.NET教程,Asp.Net开发

建站超值云服务器,限时71元/月

获取高精度的时间差,可以用来分析页面运行时间的长短
author:lostinet
from: joycode
datetime.now的精度是很低,这个低的意思是,两次获取的datetime.now的ticks的差,只是一个较大数的整数倍。例如在我的机器上,这个差最小是10.114ms。所以,如果我用datetime.now来计算时间差,那么就无法精确到10ms以内。

后来发现asp.net的trace的精度很高,用reflector看它的实现,发现了它是使用这两个方法的:

参考msdn:how to: time managed code using queryperformancecounter and queryperformancefrequency

我自己了按照这个写了个类,代码如下

using system;
using system.runtime.interopservices;
public class a
{
    [dllimport(“kernel32.dll”)]
    static extern bool queryperformancecounter([in, out] ref long lpperformancecount);
    [dllimport(“kernel32.dll”)]
    static extern bool queryperformancefrequency([in, out] ref long lpfrequency);

    static long _f = 0;

    static public long gettickcount()
    {
        long f = _f;

        if (f == 0)
        {
            if (queryperformancefrequency(ref f))
            {
                _f = f;
            }
            else
            {
                _f = -1;
            }
        }
        if (f == -1)
        {
            return environment.tickcount * 10000;
        }
        long c = 0;
        queryperformancecounter(ref c);
        return (long)(((double)c) * 1000 * 10000 / ((double)f));
    }

    //gettickcount()为0时的datetime.ticks值
    static long _tc = 0;

    //这个返回的不是真正的精确时间,但时间与时间的差是精确的。
    //getexactnow与datetime.now的偏差比datetime.now的精度还要小,所以该偏差
    static public datetime getexactnow()
    {
        if (_tc == 0)
        {
            long tc = gettickcount();
            datetime dt = datetime.now;
            _tc = dt.ticks – tc;
            return dt;
        }

        return new datetime(_tc + gettickcount());
    }
}
在asp。net的应用,可以在global.asax的application_beginrequest事件中加入代码来纪录程序开始时的tickcount:

context.items[“beginrequesttickcount”]=a.gettickcount();

然后在页面输出的后面:

<html>….
<div align=”center”>
<%=new timespan(a.gettickcount()-(long)context.items[“beginrequesttickcount”]).totalmilliseconds%>
</div>
</body></html>

这样就可以达到获取页面运行时间值了。(当然输出totalmilliseconds后asp.net还要一些后期工作的,不过这个时间应该只需要0.n ms)

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 获取高精度的时间差,可以用来分析页面运行时间的长短-.NET教程,Asp.Net开发
分享到: 更多 (0)