【问题标题】:Are these variables being garbage collected?这些变量是否被垃圾收集?
【发布时间】:2012-02-09 17:04:18
【问题描述】:

我正在尝试让 Quartz.net 调度程序工作,但我不知道为什么它没有为安排在未来日期的作业触发。我已经使用每分钟触发一次的 cron 触发器进行了测试,并且它可以工作(工作和所有工作),所以我知道这不是我的工作代码的问题。

我尝试过的事情:

  1. 使 ISchedulerFactory 成为全局静态变量
  2. 使 IScheduler 成为全局静态变量
  3. 我已在 Application_Start 的末尾添加了一封电子邮件通知,以便我知道它何时触发
  4. 每次更改调度程序代码时,我都会重新启动应用程序,它会触发我的通知电子邮件,因此我知道它已重新启动。

我在共享主机环境中运行这个程序(不确定这是否会对它产生任何影响)。我的猜测(这只是一个猜测)是垃圾收集,但我不确定是什么以及为什么。

void Application_Start(object sender, EventArgs e) 
{
    // Code that runs on application startup
    // construct a scheduler factory
    ISchedulerFactory schedFact = new StdSchedulerFactory();

    // get a scheduler
    IScheduler sched = schedFact.GetScheduler();
    sched.Start();

    // construct job info
    JobDetail jobDetail = new JobDetail("myJob", null, typeof(Recorder));
    jobDetail.JobDataMap["domain"] = "www.mydomain.com";
    jobDetail.JobDataMap["userId"] = "2";

    // Create trigger (everything is in UTC!!!)
    CronTrigger cronTrigger = new CronTrigger("Schedule");
    cronTrigger.StartTimeUtc = TriggerUtils.GetEvenSecondDate(DateTime.UtcNow);
    cronTrigger.TimeZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");  // run in pacific timezone
    cronTrigger.CronExpressionString = "0 30 13 ? * MON-FRI *"; 

    sched.ScheduleJob(jobDetail, cronTrigger);
}

【问题讨论】:

标签: c# asp.net global-asax application-start


【解决方案1】:

如果没有请求进入,IIS 可以关闭 ASP.NET 进程,因此不会触发任何代码。

这就是为什么网络应用不是服务类(始终运行)行为的良好来源的原因。

我已经看到在一个带有页面/网络服务的网络应用程序中实现了这一点,该页面/网络服务通过cURL 工具从外部被 ping。

如果您有兴趣进一步调试,请在Application_End 中添加一些通知,以确保在计时器触发您计划的作业之前进程实际上已关闭。

【讨论】:

  • 我读得越多,我就越认为这是正在发生的事情。如果应用进程关闭,新请求会触发 application_start 方法吗?
  • 是 - 如果 IIS 由于不活动而决定关闭应用程序池,则新请求将再次启动应用程序以完成请求。在 IIS 的 AppPool 设置中查看 Idle-Timeout(默认为 20 分钟)。如果 20 分钟内未发出请求,则应用程序池可能被 IIS 关闭。您可以根据需要延长此时间。
  • 另一种选择,如果您无法控制 IIS(共享主机),则每隔一段时间通过curl 向“哑”页面发送请求,以防止应用程序处于空闲状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多