结论 *1.窗体timer和线程timer、计时器timer不同,因为后两者dispose之后,GC可以收集,而前者无法收集 *2.如果一个对象的成员函数正在被执行,那么这个对象肯定不会被收集 *3.要想对无引用的对象进行收集,就必须要终止这个对象的一切timer成员,否则无法收集该对象(因为timer正在使用该对象)。如果不停止timer就直接更改指针(这个对象彻底无法访问了),这就是新时代的内存泄露,程序早晚要内存溢出 *4.timer.stop 和timer.dispose 都会使线程终止,从而可以回收垃圾 */

 using System;
 class TimersTimer
 {
     System.Timers.Timer t;
     public TimersTimer()
     {
         Console.WriteLine("Timers.Timer is created");
         t = new System.Timers.Timer();
         t.Interval = ;
         t.Elapsed += tick;
         t.Start();
     }
     void tick(object o,EventArgs e )
     {
         t.Stop();
         Console.WriteLine("tick is called");
     }
     ~TimersTimer()
     {
         Console.WriteLine("Timers.Timer is died");
     }
 }
 class FormTimer
 {
     System.Windows.Forms.Timer t = new System.Windows.Forms.Timer();
     public FormTimer()
     {
         Console.WriteLine("Form.Timer is called");
         t.Interval = ;
         t.Tick += tick;
         t.Start();
     }
     void tick(object o, EventArgs e)
     {
         Console.WriteLine("tick is called");
         t.Dispose();
     }
     ~FormTimer()
     {
         Console.WriteLine("Form.Timer is deleted");
     }
 }
 class ThreadTimer
 {
     System.Threading.Timer t;
     public ThreadTimer()
     {
         Console.WriteLine("thread.timer is called");
         t = , );
     }
     void tick(object o)
     {
         Console.WriteLine("tick is called");
         t.Dispose();
     }
     ~ThreadTimer()
     {
         Console.WriteLine("thread.timer is died");
     }
 }
 class haha
 {
     static void Main()
     {
         new TimersTimer();
         System.Threading.Thread.Sleep();
         GC.Collect();
         System.Windows.Forms.Application.Run();
     }
 }
 /*
  * 结论
  *1.窗体timer和线程timer、计时器timer不同,因为后两者dispose之后,GC可以收集,而前者无法收集
  *2.如果一个对象的成员函数正在被执行,那么这个对象肯定不会被收集
  *3.要想对无引用的对象进行收集,就必须要终止这个对象的一切timer成员,否则无法收集该对象(因为timer正在使用该对象)。如果不停止timer就直接更改指针(这个对象彻底无法访问了),这就是新时代的内存泄露,程序早晚要内存溢出
  *4.timer.stop 和timer.dispose 都会使线程终止,从而可以回收垃圾
 */

C# has three timers的更多相关文章

  1. C# 定时器 Timers.Timer Forms.Timer

    1.定义在System.Windows.Forms里 Windows.Forms里面的定时器比较简单,只要把工具箱中的Timer控件拖到窗体上,然后设置一下事件和间隔时间等属性就可以了 //启动定时器 ...

  2. C# System.Timers.Timer的一些小问题?

    比如设置间隔时间是 1000msSystem.Timers.Timer mytimer = new System.Timers.Timer(1000);问题若响应函数执行的时间超过了 1000 ms, ...

  3. [C#]System.Timers.Timer

    摘要 在.Net中有几种定时器,最喜欢用的是System.Timers命名空间下的定时器,使用起来比较简单,作为定时任务,有Quartz.net,但有时候,一个非常简单的任务,不想引入这个定时任务框架 ...

  4. High Precision Timers in iOS / OS X

    High Precision Timers in iOS / OS X The note will cover the do's and dont's of using high precision ...

  5. 問題排查:沒有任何多載符合 System.Timers.ElapsedEventHandler 委派

    這是在實作當前專案最後一個關鍵功能:提醒通知 所遇到的奇怪狀況 目前的設想,是以 Windows Form 結合 Timer,當作發送通知的載體 大家都知道在 C# 的環境裡,有三種內建的 Timer ...

  6. C# --System.Timers.Timer 定时方法

    注意Start() 注意要等Interval 时间间隔 static void Main(string[] args) { System.Timers.Timer t = new System.Tim ...

  7. System.Windows.Forms.Timer与System.Timers.Timer的区别(zz)

    .NET Framework里面提供了三种Timer: System.Windows.Forms.Timer System.Timers.Timer System.Threading.Timer VS ...

  8. Qt之Timers

    简述 QObject是所有Qt objects的基类,在Qt中提供了基础定时器的支持.使用QObject::startTimer(),你可以传递一个毫秒数间隔作为参数启动一个定时器.该函数返回一个唯一 ...

  9. 使用System.Timers.Timer类实现程序定时执行

    使用System.Timers.Timer类实现程序定时执行 在C#里关于定时器类有3个:System.Windows.Forms.Timer类.System.Threading.Timer类和Sys ...

随机推荐

  1. 在DigitalOcean云主机上搭建SVN服务器

    最近买了个DigitalOcean主机,顺便搭建个PPTP SVN服务器. 下面是搭建方法: https://www.digitalocean.com/community/tutorials/how- ...

  2. 基于JAVA的全国天气预报接口调用示例

    step1:选择本文所示例的接口"全国天气预报接口" url:https://www.juhe.cn/docs/api/id/39/aid/87step2:每个接口都需要传入一个参 ...

  3. [转][业界动态] 5G为何采纳华为力挺的Polar码?一个通信工程师的大实话

    本文转自:http://xinsheng.huawei.com/cn/index.php?app=forum&mod=Detail&act=index&id=3264791 P ...

  4. UESTC 764 失落的圣诞节 --RMQ/线段树

    题意:n种物品,每种物品对不同的人都有不同的价值,有三个人选,第一个为普通学生,第二个是集,第三个是祈,集和祈可以选一样的,并且还会获得加分,集和祈选的普通学生都不能选,问三个人怎样选才能使总分最高. ...

  5. XBOX ONE游戏开发之登陆服务器(一)

    XBOX ONE游戏开发之登陆服务器(一) XBOX LIVE是微软自已的认证服务器, 当我们开发游戏时,如果是联网游戏,需要自已架设单点登陆(SSO)服务器 这个需要微软提供Relying Part ...

  6. [No000056]你无法真正占有一个人,包括你的爱人,先生或太太、小孩,以及你自己....

    从一出生,我们的双手就握的紧紧的,好像深知自己会失去什么 很多人迷信多子多孙才是福,老来才有依靠,但太多新闻告诉我们,很多人老了,子孙为了分家产,反而让他生不如死,死了还无法入土为安. 现实也告诉我们 ...

  7. TRIM函数

    Trim() 删除字符串首尾的空白(可以首尾一起,也可以指定首或尾,取决于控制参数),但会保留字符串内部作为词与词之间分隔的空格.

  8. 【QCon笔记】Native 和 Web 融合

    #main img{width:100%;} 简介 理清 Native 和 Web 的亮点和痛点,借鉴对方亮点解决自身的痛点,并给出淘系 App 在这些方面的实践. Mobile Web 的协作能力底 ...

  9. json格式的优点

    总结:1.占带宽小(格式是压缩的)2. js通过eval()进行Json读取(便于客户端读取)3. JSON支持多种语言(c.c++.php等),便于服务端解析 JSON (JavaScript Ob ...

  10. 程序流程的控制之条件分支(Delphi)

    if语句主要来检测一个条件,并根据这个条件是True或者False来执行一段代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 var   I: Integer ...