Thread.Sleep和Timer性能比较

今天比较一下Timer和Sleep.

结果:Thread.sleep,问天下谁于争峰。

空间:
Type         work set      virtual bytes    page file bytes  Thread Count Handle  
Timer        8.990.720     114.978.816      11.444.224       4       115 
Thread.Sleep 6.590464      104.296.448      7.143.424        3        95

Thread.Sleep全胜

时间:
Type         start Time    Interval times   finish time 
Timer        11:53:37:416  10ms 100000      12:19:37:555 
Thread.Sleep 11:53:37:432  10ms 100000      12:19:36:713

Timer和Thread.Sleep打个平手,但Thread.sleep还是要强那么一点

分析:
Thread.sleep直接调用内核的指令,所在线程挂起,CPU执行队列的重排序。
Timer每次Elapsed会在线程池中取新的线程来执行,存在多次访问线程池的损耗。

测试代码:

[c-sharp]  view plain copy
  1. class Program  
  2. {  
  3.     private static System.Timers.Timer _timer;  
  4.     private static volatile int _Max = 100000;  
  5.     private static volatile int _ThreadMax = 100000;  
  6.       
  7.     static void Main(string[] args)  
  8.     {  
  9.         Console.WriteLine(System.DateTime.Now.ToString() + System.DateTime.Now.Millisecond.ToString());  
  10.         StartTimer();  
  11.         Console.WriteLine(System.DateTime.Now.ToString() + System.DateTime.Now.Millisecond.ToString());  
  12.         StartThread();  
  13.         Console.ReadLine();  
  14.     }  
  15.     static private void StartThread()  
  16.     {  
  17.         Thread s = new Thread(ThreadGo);  
  18.         s.Start();  
  19.     }  
  20.     static private void ThreadGo()  
  21.     {  
  22.         while (true)  
  23.         {  
  24.             Thread.Sleep(10);  
  25.             _ThreadMax--;  
  26.             if (_ThreadMax < 0) break;  
  27.         }  
  28.         Console.WriteLine("ThreadGo" + System.DateTime.Now.ToString() + System.DateTime.Now.Millisecond.ToString());  
  29.         Thread.CurrentThread.Abort();  
  30.     }  
  31.     static private void StartTimer()  
  32.     {  
  33.         _timer = new System.Timers.Timer();  
  34.         _timer.AutoReset = true;  
  35.         _timer.Interval = 10;  
  36.         _timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed);  
  37.         _timer.Start();  
  38.     }  
  39.   
  40.     static void _timer_Elapsed(object sender, ElapsedEventArgs e)  
  41.     {  
  42.         _Max--;  
  43.         if(_Max<0)  
  44.         {  
  45.             Console.WriteLine("_timer_Elapsed" + System.DateTime.Now.ToString() + System.DateTime.Now.Millisecond.ToString());  
  46.             _timer.Stop();  
  47.             _timer.Dispose();  
  48.         }  
  49.     }  
  50. }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值