【问题标题】:Scheduling without use of timer class in c#在c#中不使用定时器类进行调度
【发布时间】:2015-05-28 20:01:14
【问题描述】:

我需要一个建议。如何在不使用 Timer 类的情况下在 C# 中进行调度,因为它需要内存。虽然如果以有效的方式使用 Timer 不是问题,但我需要一个长期的调度过程。请分享您在不使用计时器的情况下安排的建议。

【问题讨论】:

  • “不使用计时器类,因为它需要内存” - 很确定您所做的大多数事情需要内存
  • 您需要更清楚地了解“因为它占用内存”是什么意思,以及为什么您认为不能以有效的方式使用计时器。
  • “因为它占用内存”- 你使用的任何东西都会增加一些内存占用。
  • 考虑使用 Windows 调度程序。在计划中添加您的 exe。

标签: c# timer scheduled-tasks


【解决方案1】:

一切都会占用内存。

如果您只是想为 x 延迟某些事情,您可以直接睡觉,但这对于大多数用途来说是一种糟糕的模式,但对于您想要暂停并在 x 分钟内执行某些操作的简单控制台类型的应用程序来说,它会很好。如果你在异步代码中,你也可以使用

await Task.Delay(10000);

如果您希望在一天中的某个时间运行某些东西,那么就像 cmets 中所说的那样,Windows 计划任务可能会更好。例如,没有服务只在上午 11:11 执行 X() 。

另外,请阅读 C# Timer and memory leakWhen my timer ticks.... .NET Memory Leak(它们都归结为无问题)

【讨论】:

    【解决方案2】:

    你可以试试这样的基本方法:

    public class TimeSchedule
    {
        private bool hasRun;
        private DateTime targetDate = new DateTime(2015,5,26);
    
        private void Schedule()
        {
            while (!hasRun)
            {
                if (DateTime.Now.Date < targetDate)
                {
                    //Do something
                    hasRun = true;
                }
                else
                {
                    Thread.Sleep(1000);
                }
            }
        }
    
        public void Start()
        {
            var thread = new Thread(Schedule);
            thread.Start();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-05-24
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 2020-03-05
      • 1970-01-01
      相关资源
      最近更新 更多