亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

詳解C#中的定時器Timer類及其垃圾回收機制

2020-01-24 01:11:00
字體:
來源:轉載
供稿:網友

關于C# Timer類  在C#里關于定時器類就有3個

C# Timer使用的方法1.定義在System.Windows.Forms里

C# Timer使用的方法2.定義在System.Threading.Timer類里  "

C# Timer使用的方法3.定義在System.Timers.Timer類里

下面我們來具體看看這3種C# Timer用法的解釋:

(1)System.Windows.Forms.Timer

應用于WinForm中的,它是通過Windows消息機制實現的,類似于VB或Delphi中的Timer控件,內部使用API  SetTimer實現的。它的主要缺點是計時不精確,而且必須有消息循環,Console  Application(控制臺應用程序)無法使用。  
 
(2)System.Timers.Timer

和System.Threading.Timer非常類似,它們是通過.NET  Thread  Pool實現的,輕量,計時精確,對應用程序、消息沒有特別的要求。

(3)System.Timers.Timer還可以應用于WinForm,完全取代上面的Timer控件。它們的缺點是不支持直接的拖放,需要手工編碼。

C# Timer用法實例

使用System.Timers.Timer類System.Timers.Timer t =  new System.Timers.Timer(10000); //實例化Timer類,設置間隔時間為10000毫秒;  t.Elapsed +=  new System.Timers.ElapsedEventHandler(theout); //到達時間的時候執行事件;  t.AutoReset = true; //設置是執行一次(false)還是一直執行(true);  t.Enabled = true; //是否執行System.Timers.Timer.Elapsed事件;   public void theout( object source,  System.Timers.ElapsedEventArgs e)   {    MessageBox.Show("OK!");   } 

 
Timer的垃圾回收機制
通常我們需要定時執行一段任務的時候,我們就需要定時器,這時我們就可以使用c# System.Threading空間中的 Timer定時器;他是個異步定時器,時間到時每次都是在線程池中分配一個線程去執行任務。下面我們來看一個有趣的例子:

class Program  {    static void Main(string[] args)    {      Timer timer = new Timer(TimerCallback,null,0,2000);            Console.ReadLine();    }     private static void TimerCallback(object o)    {      Console.WriteLine("in TimerCallback method");      GC.Collect();           }  }

當我們在debug模式下運行該段程序時,正如我們期盼的那樣程序會每隔2秒鐘執行該方法,打印出"in TimerCallback method”,而在release模式下執行的時候,只執行一次該方法,字符串只打印一次。在這里我們在調用TimerCallback方法時,強制執行垃圾回收器,說明在release模式下,垃圾回收器執行回收算法時,首先假設所有對象都是可回收的,當將Timer對象賦值給變量t后,t沒有在被引用,因此也就沒有變量引用Timer對象,所以垃圾收集這時會回收Timer對象。那么為什么在debug模式下卻能夠運行能,這跟c#編譯器的優化方式有關,在release模式下編譯器做了相關的優化操作。而在debug模式下,timer對象的生成期是方法的結束,這樣做也是為了調試的方便。要不然在調試時,我們執行到Timer timer = new Timer()后想看timer的值時,已經被垃圾回收器給回收了,這是我們不期望看到的結果,編譯器如何處理的,我們可以看看編譯器在release模式下和debug模式下對上面的代碼編譯后生成的IL對比我們既知結果。

release模式編譯生成的IL:

.method private hidebysig static void Main(string[] args) cil managed{ .entrypoint // Code size    32 (0x20) .maxstack 8 IL_0000: ldnull IL_0001: ldftn   void GCTest.Program::TimerCallback(object) IL_0007: newobj   instance void [mscorlib]System.Threading.TimerCallback::.ctor(object,                                           native int) IL_000c: ldnull IL_000d: ldc.i4.0 IL_000e: ldc.i4   0x7d0 IL_0013: newobj   instance void [mscorlib]System.Threading.Timer::.ctor(class [mscorlib]System.Threading.TimerCallback,                                       object,                                       int32,                                       int32) IL_0018: pop IL_0019: call    string [mscorlib]System.Console::ReadLine() IL_001e: pop IL_001f: ret} // end of method Program::Main

debug模式下生成的IL:

method private hidebysig static void Main(string[] args) cil managed{ .entrypoint // Code size    33 (0x21) .maxstack 4 .locals init ([0] class [mscorlib]System.Threading.Timer timer) IL_0000: nop IL_0001: ldnull IL_0002: ldftn   void GCTest.Program::TimerCallback(object) IL_0008: newobj   instance void [mscorlib]System.Threading.TimerCallback::.ctor(object,                                           native int) IL_000d: ldnull IL_000e: ldc.i4.0 IL_000f: ldc.i4   0x7d0 IL_0014: newobj   instance void [mscorlib]System.Threading.Timer::.ctor(class [mscorlib]System.Threading.TimerCallback,                                       object,                                       int32,                                       int32) IL_0019: stloc.0 IL_001a: call    string [mscorlib]System.Console::ReadLine() IL_001f: pop IL_0020: ret} // end of method Program::Main

從生成的IL中我們可以看出在debug模式下,生成IL比在release模式下多了19行紅色字體的IL指令碼,該指令碼的作用是將15行生成的引用Timer對象的棧上的變量存放到局部變量0中。所以使得在debug模式下該t還被引用,不能夠回收Timer對象,所以也能出現我們期盼的結果,那么如何在兩種模式下都能得到我們期盼的結果呢。我們可以如下操作。

正確的代碼:

class Program  {    static void Main(string[] args)    {      Timer timer = new Timer(TimerCallback,null,0,2000);          Console.ReadLine();      timer.Dispose();    }    private static void TimerCallback(object o)    {      Console.WriteLine("in TimerCallback method");      GC.Collect();          }  }

這時不管是在release模式下還是debug模式下,都會每隔2秒鐘調用我們的回調方法。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
不卡伊人av在线播放| 美乳少妇欧美精品| 欧美激情第99页| 欧美成人免费va影院高清| 成人女保姆的销魂服务| 日韩欧美中文字幕在线播放| 欧洲亚洲免费在线| 亚洲欧美色婷婷| 欧美日韩成人在线视频| 国产精品丝袜一区二区三区| 韩国一区二区电影| 欧美韩国理论所午夜片917电影| 中国日韩欧美久久久久久久久| 欧美精品国产精品日韩精品| 中文字幕欧美专区| 久久精品99无色码中文字幕| 91成人天堂久久成人| 最好看的2019年中文视频| 色综合久久88色综合天天看泰| 日韩欧美极品在线观看| 欧美色图在线视频| 青青草精品毛片| 久久最新资源网| 国产日韩在线亚洲字幕中文| 国产亚洲精品va在线观看| 欧美丰满少妇xxxxx| 亚洲男人天堂网| 国产成人一区二区在线| 国产免费一区二区三区在线能观看| 欧美最顶级的aⅴ艳星| 久久这里有精品视频| 91爱爱小视频k| 欧美成人免费小视频| 亚洲男人7777| 日韩经典中文字幕在线观看| 激情久久av一区av二区av三区| 亚洲自拍偷拍色图| 91久久久久久久久| 亚洲男人天堂手机在线| 欧美性色xo影院| 成人欧美在线观看| 亚洲精品福利在线观看| 国产精品无av码在线观看| 久久69精品久久久久久久电影好| 欧美国产欧美亚洲国产日韩mv天天看完整| 伊人伊成久久人综合网站| 日韩av在线免费观看| 国产精品一二三视频| 国产亚洲精品久久| 国产女同一区二区| 久久精品成人动漫| 日本免费久久高清视频| 亚洲视频欧洲视频| 国产精品盗摄久久久| 97成人精品视频在线观看| 欧美精品videossex88| 中文字幕日韩欧美在线| 国产丝袜视频一区| 成人精品一区二区三区电影免费| 亚洲国产婷婷香蕉久久久久久| 色琪琪综合男人的天堂aⅴ视频| 亚洲成人网在线观看| 日本91av在线播放| 日本精品一区二区三区在线播放视频| 国产精品成人av在线| 精品成人在线视频| 欧美国产中文字幕| 日韩一区二区在线视频| 欧美激情视频三区| 亚洲天堂2020| 亚洲韩国日本中文字幕| 色无极亚洲影院| 国产在线视频2019最新视频| 欧美精品videossex88| 亚洲人成自拍网站| 日韩av在线影院| 国产精品91免费在线| 高清一区二区三区日本久| 欧美精品在线极品| 久久婷婷国产麻豆91天堂| 色综合老司机第九色激情| 亚洲精品天天看| 久久精品视频在线| 亚洲一区二区三区成人在线视频精品| 亚洲一区二区三区四区在线播放| 成人性生交大片免费看视频直播| 成人黄色中文字幕| 中文字幕日本欧美| 91精品在线观看视频| 亚洲品质视频自拍网| 欧美色videos| 伊人久久久久久久久久久久久| 97在线视频免费播放| 亚洲国产精品久久久| 日韩电影免费观看中文字幕| 日韩中文字幕视频在线观看| 亚洲男人天堂网站| 国内精品久久久久久久久| 久久精品国产久精国产一老狼| 欧美成人精品在线视频| 欧美成人午夜影院| 国产精品中文久久久久久久| 一本色道久久综合狠狠躁篇怎么玩| 一区二区三区亚洲| 91chinesevideo永久地址| 亚洲黄色免费三级| 97**国产露脸精品国产| 欧美激情亚洲激情| 亚洲人成电影网站色…| 久久久亚洲天堂| 亲爱的老师9免费观看全集电视剧| 久久中文字幕在线视频| 国产成人avxxxxx在线看| 国产精品老牛影院在线观看| 欧美性xxxx极品高清hd直播| 久热精品视频在线观看| 亚洲另类图片色| 欧美大肥婆大肥bbbbb| 亚洲性线免费观看视频成熟| 国产日韩换脸av一区在线观看| 91精品久久久久久久久青青| 日韩电影免费在线观看中文字幕| 国产综合在线观看视频| 亚洲最大在线视频| 欧美在线一区二区视频| 日韩视频―中文字幕| 色播久久人人爽人人爽人人片视av| 国产精品吹潮在线观看| 色婷婷**av毛片一区| 亚洲一区制服诱惑| 中文国产亚洲喷潮| 欧美性xxxx极品hd欧美风情| 中文字幕亚洲无线码a| 91网站免费看| 亚洲人成在线观看网站高清| 欧美极品少妇全裸体| 欧美尺度大的性做爰视频| 久久久精品欧美| 欧美激情视频一区二区| 日本国产精品视频| 一本一本久久a久久精品牛牛影视| 国产精品aaaa| 久久久精品一区二区| www.xxxx欧美| 欧美成年人在线观看| 精品一区二区三区四区在线| 久久久国产精品x99av| 最近日韩中文字幕中文| 久久精品国产成人精品| 国产精品偷伦一区二区| 综合国产在线观看| 欧美xxxx做受欧美.88| 欧美性高潮床叫视频| 欧美精品在线免费| 国产69精品久久久久久| 在线看日韩av| 中文亚洲视频在线| 亚洲大胆美女视频| 精品亚洲va在线va天堂资源站| 中文字幕亚洲精品| 亚洲淫片在线视频| 伊人男人综合视频网| 国产精选久久久久久| 国产精品视频yy9099|