2

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

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

文件系统观察者?
系统.定时器.定时器?
线程.睡眠?
其他?

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

4

5 回答 5

1

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

于 2009-10-08T16:27:39.120 回答
1

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

没有必要把事情复杂化。

于 2009-10-08T16:29:43.860 回答
0

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

于 2009-10-08T16:31:16.260 回答
0

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

于 2009-10-08T16:41:21.417 回答
0

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

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

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

于 2009-10-08T17:44:36.127 回答