我有这个简单的Windows服务,它是浏览器游戏的一部分。它的作用是检查数据库,如果需要,更新一些行。这些操作大约需要0.5到1秒。
它读取的数据是一个告诉项目是否应该更新的日期。
它完美无缺,但总是晚了大约25秒。如果我将一个项目添加到队列中,并且该项目在15:00:00完成,则该服务将在15:00:25ish更新它。
我尝试过使用threading.timer,单个线程和timers.timer,所有工作方式都相同。我也试过在经过的时候停止计时器,虽然它只需不到一秒钟,所以它应该不是问题。
我还尝试将服务附加到调试器,除非我设置断点,否则会发生同样的事情。然后它会在遇到断点时发生,然后按f5继续。
任何人都可以解释为什么服务似乎落后了?还有一个可能的解决办法。
我以为我的线程耗尽了,但我还剩1000个,所以我有点空白。
请询问您是否需要更多详情,我可以提供。
我正在使用.net 4.0 / C#
Threading.Thread
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();
}
}
Timers.Timer
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();
}
}
答案 0 :(得分:0)
问题可能是由于: