アプリケーションを作成する最良の方法は何だろうと考えていました。基本的に、マルチスレッドでさまざまなゲーム シミュレーションを同時に実行できるスポーツ シミュレーション プロジェクトがあります。
DateTime が添付された SQLite データベースに一致を保存します。
新しい試合をプレイする必要があるかどうかを 1 時間ごとに確認し、それらのスレッドを生成するアプリケーションを作成したいと考えています。
そのプロセスのさまざまなインスタンスが共有するオブジェクト(特にトーナメントオブジェクト)があり、DBに保存されたときに新しいプロセスによって上書きされると思われるため、タスクスケジューラがこれを毎時間実行することに依存することはできません. したがって、理想的には、何時間にもわたってスリープするある種の長時間実行プロセスを作成する必要があります。
各オブジェクトがメモリから 1 回だけ読み込まれるようにオブジェクト モデルを作成したので、すべてのシミュレーション スレッドがこの 1 つのアプリケーションから生成される限り、データを上書きすることはありません。
編集:要件の詳細
基本的に、複数のマッチを同時に実行できる必要があります。これらのマッチは任意の長さにすることができるため、一方が他方の開始前に終了する必要はありません (実際、ほとんどの場合、同時に複数のマッチが実行されます)。
私が思い描いているのは、バックグラウンドで実行されるプログラム (サービスだと思いますか?) で、60 分間スリープし、データベースをチェックして、ゲームを開始する必要があるかどうかを確認します。開始するゲームがある場合は、スレッドを起動してそれらのゲームをシミュレートし、スリープ状態に戻ります。したがって、シミュレーション スレッドは実行されていますが、「スケジューリング」スレッドはさらに 60 分間スリープ状態になります。
私がデフォルトの OS タスク スケジューリング インターフェイスを使用できない (と思う) 理由は、これらのインターフェイスでは、実行するタスクを新しいプロセスとして破棄する必要があるためです。私は、最初のロード時に各オブジェクト クラスによってキャッシュされる (メモリ参照) ようにデータベース オブジェクト モデルを開発しました。つまり、各オブジェクトはメモリから 1 回だけロードされ、その参照はすべての保存で使用されます。つまり、各シミュレーション スレッドが完了してその状態を保存すると、同じ参照が (更新された状態で) 状態を保存するために使用されます。毎回異なる実行可能ファイルが起動されると、おそらく各プロセスによって異なるメモリ参照が開かれるため、1 つのプロセスが DB に保存され、他のプロセスによって書き込まれた状態が上書きされる可能性があります。
サービスは道のりのように見えます。サービスを 60 分間スリープさせ、その後ウェイクアップして関数を実行する方法はありますか? これを標準のコンソール アプリケーションにするのはメモリを浪費する気がしますが、私が認識していない効率的な方法があるかどうかはわかりません。