当前位置:编程学习 > C#/ASP.NET >>

C#中获取精确时间

程序中获取精确的时间,有时是非常必要的。常用的是,在测试程序的性能时,需要使用到精确的时间计时。或者其他情况要用到精确的时间。这就要用到一个函数QueryPerformanceCounter()。用法是从第一次调用QueryPerformanceCounter(),过一段时间后再次调用该函数结束的.两者之差除以QueryPerformanceFrequency()的频率就是开始到结束之间的秒数。由于计时函数本身是要耗费很少的时间,所以但一般忽略不计。
    有一点要注意的是,如果在多处理器的电脑上使用这个函数需要,需要指定调用的处理器。因为在不同的处理器上会得到不同的结果。
    下面的类可以实现该功能。


public class QueryPerformance 

        [DllImport("Kernel32.dll")] 
        private static extern bool QueryPerformanceCounter(out long performanceCount); 
 
        [DllImport("Kernel32.dll")] 
        private static extern bool QueryPerformanceFrequency(out long frequency); 
 
        private long begintTime = 0;//开始时间  
         
        private long endTime = 0;//结束时间  
 
        private long frequency= 0;//处理器频率  
         
        public long BegintTime 
        { 
          get{return begintTime;} 
        } 
         
         public long EndTime 
        { 
          get{return endTime;} 
        } 
         
         public long Frequency 
        { 
          get{return frequency;} 
        } 
 
 
        public QueryPerformance() 
        { 
            QueryPerformanceFrequency(frequency)//获取频率  
        } 
 
        public void Start() 
        { 
            QueryPerformanceCounter(begintTime); 
        } 
 
        public void Stop(bool showRecord) 
        { 
            QueryPerformanceCounter(endTime); 
 
            if (showRecord) 
            { 
                Console.WriteLing(string.Format("用时:{0}s", TastTime)); 
            } 
        } 
 
        public double TastTime//花费时间:单位S  
        { 
            get 
            { 
               if(frequency>0) 
                return (double)(endTime - begintTime) / frequency; 
               else 
                return 0; 
            } 
        } 

public class QueryPerformance
{
        [DllImport("Kernel32.dll")]
        private static extern bool QueryPerformanceCounter(out long performanceCount);

        [DllImport("Kernel32.dll")]
        private static extern bool QueryPerformanceFrequency(out long frequency);

        private long begintTime = 0;//开始时间
       
        private long endTime = 0;//结束时间

        private long frequency= 0;//处理器频率
       
        public long BegintTime
        {
          get{return begintTime;}
        }
       
         public long EndTime
        {
          get{return endTime;}
        }
       
         public long Frequency
        {
          get{return frequency;}
        }


        public QueryPerformance()
        {
            QueryPerformanceFrequency(frequency)//获取频率
        }

        public void Start()
        {
            QueryPerformanceCounter(begintTime);
        }

        public void Stop(bool showRecord)
        {
            QueryPerformanceCounter(endTime);

            if (showRecord)
            {
                Console.WriteLing(string.Format("用时:{0}s", TastTime));
            }

补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,