我有这个简单的 Windows 服务,它是浏览器游戏的一部分。它的作用是检查数据库,并在需要时更新一些行。这些动作大约需要 0.5 到 1 秒。
它读取的数据是一个日期,它告诉我们是否应该更新一个项目。
它运行良好,但总是迟到 25 秒左右。如果我将一个项目添加到队列中,并且该项目在 15:00:00 完成,则服务将在 15:00:25 左右更新它。
我尝试过使用 threading.timer、单线程和 timers.timer,所有这些都以相同的方式工作。我也尝试过在运行时停止计时器,虽然它需要不到一秒钟,所以它不应该是一个问题。
我还尝试将服务附加到调试器,除非我放置断点,否则会发生同样的事情。然后它一旦到达断点就会发生,我按 f5 继续。
谁能阐明为什么该服务似乎落后了?和一个可能的修复。
我以为我的线程用完了,但我还剩下 1000 个,所以我有点空白。
请询问您是否需要更多详细信息,以便我提供。
我正在使用 .net 4.0 / C#
线程.线程
public partial class Service : ServiceBase
{
Thread thread;
public Service()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
thread = new Thread(DoWork);
thread.Start();
}
private static void DoWork()
{
while (true)
{
//finish workingqueueitems
WorkingQueue.ProcessFinishedItems();
Thread.Sleep(1000);
}
}
protected override void OnStop()
{
thread.Abort();
}
}
定时器.定时器
public partial class Service : ServiceBase
{
System.Timers.Timer workingQueueTimer;
public Service()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
workingQueueTimer = new System.Timers.Timer();
workingQueueTimer.Elapsed += new ElapsedEventHandler(workingQueueTimer_Elapsed);
workingQueueTimer.Interval = 1000;
workingQueueTimer.Enabled = true;
}
void workingQueueTimer_Elapsed(object sender, ElapsedEventArgs e)
{
workingQueueTimer.Enabled = false;
DoWork();
workingQueueTimer.Enabled = true;
}
private static void DoWork()
{
//finish workingqueueitems
WorkingQueue.ProcessFinishedItems();
}
protected override void OnStop()
{
workingQueueTimer.Stop();
workingQueueTimer.Dispose();
}
}