关于Environment.TickCount属性
简介
Environment.TickCount
属性隶属于System
命名空间,变量类型为int
该属性用于获取从0001年1月1日 上午12:00到该属性调用时的计算机时间的毫秒值,通常可以通过两个Environment.TickCount
属性判断代码运行的时间
该属性的变量类型为int
类型,因此其数据大小为-2147483648~2147483647
,且不会在数据溢出时出现System.OverflowException
变量溢出错误
使用例
以下代码例通过程序待机语句模拟代码运行,来判断程序运行时间:
class Program
{
static void Main()
{
// 获取系统启动后的毫秒数
int tickCount = Environment.TickCount;
Console.WriteLine("当前的TickCount值: " + tickCount);
// 假设这里有些程序,运行了1000纳秒
System.Threading.Thread.Sleep(1000);
// 再次获取TickCount值,并计算经过的时间
int newTickCount = Environment.TickCount;
// 注意:由于TickCount是一个32位int类型的整数
// 因此,我们不能简单地通过相减来获取经过的时间
// 我们需要使用下面的方法来确保结果是非负的
int elapsedMilliseconds = (newTickCount >= tickCount) ? (newTickCount - tickCount) : (Int32.MaxValue - tickCount + newTickCount + 1);
//输出第二个tickCount值,以供参考
Console.WriteLine("第二个TickCount值为:{0}" , newTickCount);
Console.WriteLine("经过的时间(毫秒): " + elapsedMilliseconds);
}
}
当在不同时间段运行这段代码时,两个Environment.TickCount
的值都会不同。因为该属性代表0001年1月1日 12:00到计算机系统时间所用的毫秒数
注意事项
可以通过使用两个Environment.TickCount
值来判断程序运行时间,但一般而言,这种做法是不稳定的,原因如下:
-
Environment.TickCount
的类型是int类型,这就代表着它的值范围是-2147483648~2147483647
,而当它超出这个范围时,其值将回滚到int.MinValue
,即-2147483648
并继续递增。
即使代码运行时Environment.TickCount
的值正好是int.MinValue
,其也会在大概49.7天后回到int.MinValue
的值,这对于需要长时间运行的代码是不稳定的 Environment.TickCount
的分辨率(即以多少毫秒为一秒)是跟随计算机而定的,这就代表当计算机的分辨率精度较低时,其判断程序运行的精度也会降低
如果需要高精度地判断计算机运行时间,可以使用StopWatch
类,详见:stopwatch类
参考文献
Microsoft C#文档:Environment.TickCount属性