服务器的计时器的Interval最大能设置为多大?

整理了一下已知条件:
.Net Timer
的限制------最大的问题是:到底Interval最大能设置为多大?

1.       Interval 是以毫秒为单位

2.       Windows 窗体 Timer 组件是为 Windows 窗体环境设计的。如果需要适合服务器环境的计时器,应该使用服务器的计时器

 

当编制 Timer 组件时,需要考虑 Interval 属性的几点限制:

1.       如果您的应用程序或另一个应用程序对系统的需求很大(如:长循环大量计算或驱动器、网络或端口访问),那么您的应用程序可能无法以 Interval 属性指定的频率来获取计时器事件

2.       间隔可以在 1 64,767 之间(包括 1 64,767,这意味着即使最长的间隔(大约 64.8 秒)也不会超过一分钟很多。

3.       不能保证间隔所精确经过的时间。若要确保精确,计时器应根据需要检查系统时钟,而不是尝试在内部跟踪所积累的时间。

4.       系统每秒生成 18 个时钟刻度,因此即使 Interval 属性以毫秒为单位,间隔的实际精度也不超过十八分之一秒

 

基于服务器的计时器允许指定在应用程序中引发事件的重复时间间隔。然后可通过处理这个事件来提供常规处理。例如,假设您有一台关键的服务器,必须保持一周 7 天、一天 24 小时连续运行。您可以创建一个服务,通过使用计时器来定期检查关键的服务器,确保系统启动并运行。如果该系统没有响应,此服务可以尝试重新启动服务器或通知系统管理员。

 

注意:以毫秒为单位指定服务器计时器的时间间隔。

 

Visual Studio .NET .NET Framework 中有三种计时器控件:基于服务器的计时器,位于“工具箱”的“组件”选项卡上;基于 Windows 的标准计时器,位于“工具箱”的“Windows 窗体”选项卡上,以及仅可在编程时使用的线程计时器。

 

基于服务器的计时器是传统的计时器为了在服务器环境上运行而优化后的更新版本

 

线程计时器是一种简单的、轻量级计时器,使用回调方法而不是事件,并由线程池线程提供。

计时器的设计目的各不相同,它们的线程处理明确地指出了这一点:

 

Windows 计时器是为单线程环境设计的,其中,UI 线程用于执行处理。Windows 计时器的精度限定为 55 毫秒。这些传统计时器要求用户代码有一个可用的 UI 消息泵,而且总是在同一个线程中操作,或者将调用封送到另一个线程。对于 COM 组件来说,这样会降低性能

 

基于服务器的计时器是为在多线程环境下与辅助线程一起使用而设计的。由于它们使用不同的体系结构,因此基于服务器的计时器可能比 Windows 计时器精确得多。服务器计时器可以在线程之间移动来处理引发的事件。

 

消息不在线程上发送的方案中,线程计时器是非常有用的。例如,基于 Windows 的计时器依赖于操作系统计时器的支持,如果不在线程上发送消息,与计时器相关的事件将不会发生。在这种情况下,线程计时器就非常有用。

 

Windows 计时器位于 System.Windows.Forms 命名空间中,服务器计时器位于 System.Timers 命名空间中,而线程计时器位于 System.Threading 命名空间中。

 

基于服务器的计时器的关键编程元素

Timer 组件使用 Microsoft .NET Framework 中的 System.Timers 命名空间。此命名空间中与 Timer 组件相关的主要类是 System.Timers.Timer

 

Timer 组件引发一个名为 Timer.Elapsed 的事件。您可以为这个事件创建处理程序来执行处理要发生的一切。

 

Timer 组件的一些更重要的属性和方法还包含:

Interval 属性用来设置引发事件的时间范围,以毫秒计。例如,值为 1000 的时间间隔将一秒钟引发一次事件。默认为 100 毫秒。

AutoReset 属性决定在给定时间间隔过去之后计时器是否继续引发事件。如果设置成 true,计时器继续重新计算时间间隔并引发事件。如果 false,它在时间间隔过去后只引发一次事件,然后停止。

Start 方法将计时器的 Enabled 属性设置为 true,它允许计时器开始引发事件。如果计时器已经是启用状态,则调用 Start 方法将重置该计时器。

Stop 方法将计时器的 Enabled 属性设置成 false,以防止计时器再引发事件。

 

---------------------------------------------------------

然而,仍然没能知道到底Interval可以设置为多大,我给它赋值24*3600000 (24小时),也没有爆,没有异常。
暂时还没足够时间检测,郁闷。

posted @ 2004-03-20 09:26  CZoneSoft  阅读(2226)  评论(2编辑  收藏  举报