(Win/C#/.Net) Applet 需要每隔一小时轮询一次——关于最佳方法的建议?

Posted

技术标签:

【中文标题】(Win/C#/.Net) Applet 需要每隔一小时轮询一次——关于最佳方法的建议?【英文标题】:(Win/C#/.Net) Applet needs to poll at hourly interval - recommendations on best method? 【发布时间】:2009-10-08 16:24:21 【问题描述】:

Applet 需要轮询一个目录是否存在,例如,每 1-4 小时一次,如果找不到,则发送几封电子邮件/NET SEND。尚不确定确切的时间间隔,但绝对不会短于 1 小时。在可预见的未来,整个“工作”将是永久性的并持续运行。 Applet 将在 Win2k3 服务器上运行,并且基于(极轻的)用户使用模式,我怀疑它会以任何明显的方式干扰主要服务器功能,但只是希望它表现良好,当然!最终考虑将其作为 Win Service 实现,但由于各种原因,第一次实现将作为控制台应用程序。

寻求在系统资源使用方面最精简的实现,特别是 CPU 和 RAM。 最关心的是计时/轮询实现与 CPU 使用情况。 不会创建大量对象、GUI 等,因此 RAM 使用情况应该不是什么大问题,但我需要如果我将垃圾收集实现为长时间运行的 .exe(在几个月/几年的意义上),是否要特别考虑垃圾收集?

FileSystemWatcher? System.Timers.Timer? 线程.睡眠? 其他的?

实际上,在我写这篇文章的时候,最简单的实现——从重用已经为这类任务发明的许多现有“***”的角度来看——根本不会轮询,而是简单地设计它启动、执行操作和关闭,并让 Windows 计划任务基础结构处理时间方面。但是我还是发布了该想法的验证+一般信息以供将来参考。泰!

【问题讨论】:

抱歉长时间延迟接受。接受了我根据包含奖金细节所做的那个。 TY所有的回应! 【参考方案1】:

使用 Windows 计划服务来计划您的控制台应用程序的运行。使用 Directory.Exists 对目录进行简单检查,并根据需要发送电子邮件。

【讨论】:

【参考方案2】:

我会将其设计为作为无头应用程序运行(记录到事件日志或您选择的接收器)并让任务计划程序完成其工作并按小时调用它。

没有必要把事情复杂化。

【讨论】:

【参考方案3】:

Windows 计划任务绝对是要走的路。而 Thread.Sleep(n) 绝对是不是要走的路。 System.Timers.Timer 将是您在应用程序中执行此操作的方法,初始间隔为 3600000。在每个 Elapsed 事件中,您应该禁用 Timer,执行您需要执行的任何代码,然后重新-启用计时器,其间隔等于下一小时的时间减去当前系统时间。否则,您的 Timer 将与系统时间不同步(尽管这对您的目的而言可能无关紧要,在这种情况下,它会变得很糟糕)。

【讨论】:

【参考方案4】:

过去,我通过简单地创建控制台应用程序并让它从 Windows 计划任务中执行来处理类似的任务。这样它就可以执行其操作,然后从内存中卸载。此外,如果需要对服务器执行一些工作(如系统升级),可以很容易地暂时禁用计划任务。此外,如果计划需要更改(更多/更少),计划任务界面已经考虑了多次运行。

【讨论】:

【参考方案5】:

出于以下几个原因,我们尝试编写与 Windows 服务类似的工具(正如您所说的未来实现可能):

通过 NET.EXE(最终是 PowerShell)进行简单的远程管理 通过 System Center Operations Manager(原 MOM)轻松监控 如果需要可以缓存数据/对象 标准化

请注意,我们为创建这些项目开发了一个框架和相关模板;这样每个项目就不必处理轮询间隔的配置等。

【讨论】:

以上是关于(Win/C#/.Net) Applet 需要每隔一小时轮询一次——关于最佳方法的建议?的主要内容,如果未能解决你的问题,请参考以下文章

从 ASP.NET 3.5 应用程序在 IFRAME 中运行 GWT 应用程序(包括 Applet)?

Applet 之 JAVA入门探索

Java入门 - 高级教程 - 08.Applet

设计模式 - 模板方法模式(template method pattern) Applet 具体解释

Java Applet PDF打印

JAVA中的applet是啥?