【问题标题】:Windows Service OverlapsWindows 服务重叠
【发布时间】:2015-02-06 22:52:07
【问题描述】:

我正在尝试更多地了解 Windows 服务。我有一个每 15 秒运行一次。如果在 15 秒再次启动时服务仍在执行,会发生什么情况?服务可以/是​​否与自身同时运行?如果同时运行太多服务会造成严重的内存问题吗?

编辑

所以我应该更清楚:服务正在运行,并且每 15 秒有一个计时器用于运行一组操作。我想知道该计时器是否在前一次运行仍在执行时会发生什么结果。是否应该将其视为递归调用?

【问题讨论】:

  • 你写了 15 秒和 15 分钟。他们应该都是 15 分钟吗?
  • 不清楚你在问什么。服务要么正在运行,要么没有。您不能同时运行同一服务的多个实例(如果您真的在谈论 Windows 服务)。
  • 你是否混淆了windows服务和计划任务?
  • 查看编辑了解新信息
  • 随着您的更新,这与 Windows 服务无关 - 它会影响任何 .Net 进程。我建议您对计时器的工作原理进行一些研究。

标签: c# windows-services


【解决方案1】:

我在开发此类服务时使用的典型解决方案是不实际使用重复计时器。我要做的是创建一个单次计时器,设置为在 15 分钟内打勾。当计时器的过程开始时,我记录当前时间,并使用它来查找过程结束时的运行时间。使用它我设置了另一个计时器(或重置相同的计时器)在 15 分钟内关闭 - proc 实际花费的时间。如果 proc 需要超过 15 分钟,我可以调整时间。这样,计时器将永远不会重叠和堆叠。

【讨论】:

  • 他编辑了他的问题。原来是 15 分钟。
  • 15秒、15分钟、15小时,实际时间不影响一般算法。
【解决方案2】:

据我所知,您一次只能运行一个 Windows 服务,并且该服务会使用计时器定期执行一项任务。

如果您生成一个新线程来执行所述任务,并且当计时器再次触发时该任务仍有可能运行,那么您需要使用某种同步技术(如互斥锁)来控制对共享资源的访问防止两个线程相互干扰。

或者,如果互斥锁(等)已经锁定,如果任务每 15 秒运行一次而不失败并不重要,您也可以跳过运行任务。

【讨论】:

  • 我不会报复投票。我的回答有什么问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
  • 2017-10-12
  • 1970-01-01
  • 1970-01-01
  • 2010-12-18
  • 1970-01-01
相关资源
最近更新 更多