ブラウザゲームの一部であるこの単純な Windows サービスがあります。データベースに対してチェックを行い、必要に応じていくつかの行を更新します。これらのアクションには約 0.5 ~ 1 秒かかります。
読み取るデータは、アイテムを更新する必要があるかどうかを示す日付です。
完全に機能しますが、常に約 25 秒遅れます。アイテムをキューに追加し、そのアイテムが 15:00:00 に完了すると、サービスはそれを 15:00:25ish に更新します。
threading.timer、単一のスレッド、および timers.timer を使用してみましたが、すべて同じように機能します。また、経過時間の実行中にタイマーを停止しようとしましたが、1 秒もかからないので問題にはなりません。
また、サービスをデバッガーにアタッチしようとしましたが、ブレークポイントを置かない限り同じことが起こります。次に、ブレークポイントに到達するとすぐに発生し、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();
}
}
タイマー.タイマー
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();
}
}