C#计时器
2015-11-01 21:40
495 查看
C#中一共有4中常用的计时器:
System.Timers.Timer 和 System.Windows.Forms.Timer ,它的最低识为 1/18s。
timeGetTime ,它的最低识别能达到 5ms 。
System.Environment.TickCount ,它的最低识别为毫米级。
QueryPerformanceCounter,它的最低识别为 1ms。
//以QueryPerformanceCounter为例:
public class Program
{
//引用Win32 API 中的 QueryPerformanceCounter() 方法
//该方法引来查询任意时刻高精度计数器的实际值
[DllImport("Kernel32.dll")]
private static extern bool QueryPerformanceCounter(out long lpPerformanceCount);
//引用Win32 API 中的 QueryPerformanceFrequency() 方法
//该方法返回高精度计数器每秒的计数值
[DllImport("Kernel32.dll")]
private static extern bool QueryPerformanceFrequency(out long lpFrequency);
public static void Main(string[] args)
{
long startTime, endTime;
long freq;
if (QueryPerformanceFrequency(out freq) == false)
{
//不支持高性能计时器
throw new Win32Exception();
}
Thread.Sleep(0); //让等待线程工作,此例为单线程,可省略
QueryPerformanceCounter(out startTime); //记录开始时间,精度为1ms
for (int i=0;i<10000;i++)
{
for (int j = 0; j < 10000; j++)
{
int temp = 0;
}
}
QueryPerformanceCounter(out endTime); //记录结束时间,精度为1ms
Console.WriteLine((double) (endTime - startTime)*1000/freq+"ms");
Console.ReadKey();
}
}
//Result:
//412.58911914026ms
//结果根据个人电脑的性能而有所差别
System.Timers.Timer 和 System.Windows.Forms.Timer ,它的最低识为 1/18s。
timeGetTime ,它的最低识别能达到 5ms 。
System.Environment.TickCount ,它的最低识别为毫米级。
QueryPerformanceCounter,它的最低识别为 1ms。
//以QueryPerformanceCounter为例:
public class Program
{
//引用Win32 API 中的 QueryPerformanceCounter() 方法
//该方法引来查询任意时刻高精度计数器的实际值
[DllImport("Kernel32.dll")]
private static extern bool QueryPerformanceCounter(out long lpPerformanceCount);
//引用Win32 API 中的 QueryPerformanceFrequency() 方法
//该方法返回高精度计数器每秒的计数值
[DllImport("Kernel32.dll")]
private static extern bool QueryPerformanceFrequency(out long lpFrequency);
public static void Main(string[] args)
{
long startTime, endTime;
long freq;
if (QueryPerformanceFrequency(out freq) == false)
{
//不支持高性能计时器
throw new Win32Exception();
}
Thread.Sleep(0); //让等待线程工作,此例为单线程,可省略
QueryPerformanceCounter(out startTime); //记录开始时间,精度为1ms
for (int i=0;i<10000;i++)
{
for (int j = 0; j < 10000; j++)
{
int temp = 0;
}
}
QueryPerformanceCounter(out endTime); //记录结束时间,精度为1ms
Console.WriteLine((double) (endTime - startTime)*1000/freq+"ms");
Console.ReadKey();
}
}
//Result:
//412.58911914026ms
//结果根据个人电脑的性能而有所差别
相关文章推荐
- c#语句 (随堂练习)
- 空合并操作符
- 《CLR via C#》---枚举标志和标志位
- C#编写的扫雷游戏
- BC#62C题求二叉树不同节点数的子树的个数
- 2015-10-27 C#3
- C#中静态与非静态方法比较
- C#概述
- Direct3D基础
- 【C#】winform子窗体与父窗体传值,子窗体与子窗体传值
- (抽象)类和接口细节分析
- 学习DataGridViewX
- C#后台做数据存储出现延时、超时的情况
- C#委托(一)
- c# textbox响应回车并且去除“咚”的一声
- C#中关于静态与非静态的一个疑问
- c#入门
- C# 常用接口学习 IComparable 和 IComparer
- debian中配置c#语法高亮的vim编辑器,并使用YouCompleteMe自动补全
- C# 结构体 struct