情况是在WinCE操作系统下,内存资源比较紧张的时候。

解决方案 »

  1.   


    问题一:Timer有三种,System.Windows.Forms.Timer、System.Threading.Timer、System.Timers.Timer,它们都是基于线程池的工作的,你创建线程的话至少会消耗1M的内存;问题二:Timer控件的出现其实是为了降低“UI程序员”的开发难度,与其他两个Timer最大的区别在于Tick会回到UI线程;问题三:IO速度与CPU的速度不是一个概念上的。
      

  2.   

    线程和定时器没有可比性。
    任何代码,都在线程中运行,即便你就写一个控制台程序,它也有一个线程。
    已经在另外一个相似贴中回答了,之所以开销大,是因为你不恰当地使用轮询。
    另ls说法有误,System.Windows.Forms.Timer工作在UI线程,它基于一个Windows的消息WM_TIMER,相应它的代码写在主线程中。你可以理解为操作系统定时按你窗体的一个按钮触发一段代码。
      

  3.   

    Timer(不管是哪一个层次的)使用了windows系统的底层机制,并且进行了封装。它不阻塞占用什么线程,它只需要维护一个定时控制对象队列,它是事件回调触发的,它可以在运行中进行“开启、关闭、修改时间”等操作。你写一些循环阻塞的线程去模拟一些类似定时操作,在各方面都远远不及 Timer 机制更有效。
      

  4.   

    关于“它可以与Winform窗体主线程并存”的问题:在触发事件时,首先根据 Timer 初始化时的参数的不同,或者去找到调用者线程,或者去找到进程主线程,或者去找到初始化某参数对象的实例化线程,或者使用系统线程池,等等多种形式选择不同线程,然后才触发事件。比如说你使用 System.Timer.Timer,它的 SynchronizingObject 属性标记了应该查找哪一个对象去寻找“封送操作”目标线程。如果你直接把这个控件拖到窗体上,那么 vs 设计器就会把这个属性设置为当前的窗体,从而在创建窗体的线程上下文中执行操作。而如果你直接在代码中创建对象实例,你可能就会让这个属性为null,从而在系统线程池操作。如果你使用 System.Windows.Form.Timer,那么它天生就是单线程的。如果你使用 System.Threading.Timer,那么它是最接近底层 Timer 的,你可以控制各种参数。如果你使用 System.Web.Timer,可能就不是上述任何一种 Timer,不在讨论范围内。
      

  5.   


    这么说Timer更加节省存储了,对吗?
      

  6.   

    看来你还是没有明白LS苦口婆心地给你讲的一大堆原理
    通过比较这两者的内存消耗来判断哪一种方案更好是没有实际意义的
    换句话讲,一种是多消耗了几K内存的良好设计,一种是精简内存但是需要硬编码艰难实现的设计
    换作你,你会选哪一种?
    Timer的设计初衷主要是为了简化设计,以便让程序员腾出精力去处理业务逻辑,而不是纠缠于相对复杂的底层定时和线程切换控制那几种Timer的用途也各不相同,你需要仔细去了解一下
      

  7.   


    Timer控件好像是根据系统时间来执行的,也就是说Timer控件1妙执行一次   如果说里面的程序执行消耗了这1妙,那么Timer不会再等1妙,而会直接执行第二次,对吗???
      

  8.   

    额~我也在看timer方面的问题,不知道怎么实现我的需求工厂工作中心,扫描一个员工就开始计时,每个员工每隔10S写入数据一次,一个工序最多100人同时操作,卡在这个地方了。。
      

  9.   

    这个starrytong系列账号,发了一堆贴子,然后自问自答,明显是准备倒分了斑竹看住他,若是给自己分,就封了他