1

ブラウザゲームの一部であるこの単純な 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();
    }
}
4

1 に答える 1