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

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

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

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

有帮助吗?

解决方案

Windows 计划任务绝对是最佳选择。Thread.Sleep(n) 绝对是 不是 要走的路。A System.Timers.Timer 如果您要在应用程序中执行此操作,初始间隔为 3600000,那么这将是可行的方法。在每个 Elapsed 事件中,您应该禁用计时器,执行您需要执行的任何代码,然后重新启用计时器,间隔等于下一个整点整点时间减去当前系统时间。否则你的计时器将与系统时间不同步(尽管这对于你的目的来说可能并不重要,在这种情况下就让它见鬼去吧)。

其他提示

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

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

没必要把事情搞得太复杂。

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

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

  • 通过 NET.EXE(最终是 PowerShell)进行简单的远程管理
  • 通过轻松监控 系统中心运营经理 (原妈妈)
  • 如果需要可以缓存数据/对象
  • 标准化

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top