「スケジューラー」の一部であるループを持つアプリケーションがあります。これは常に実行され、アプリケーションの中心です。ゲームループとほとんど同じですが、私のアプリケーションはWPFアプリケーションであり、ゲームではありません。当然、アプリケーションは多くのポイントでログを記録しますが、スケジューラーは機密性の高い監視を行います。ログだけでは、何が間違っているのか(間違って例外を意味するわけではありません)や現在のステータスを判断できない場合があります。
スケジューラの内部ループは短い間隔で実行されるため、そこでファイルI / Oベースのログ記録(またはイベントビューアの使用)を実行することはできません。まず、リアルタイムで監視する必要があります。次に、ログファイルのサイズが非常に速く大きくなります。そこで、このデータをリアルタイムでユーザーに表示する方法を考えていました。いくつか考えました。
- UIにリアルタイムでデータを表示する
- AllocConsole / WriteConsoleを使用して、この情報をコンソールに表示します
- この情報を表示する別のコンソールアプリケーションを使用し、パイプまたは他のIPC技術を使用してスケジューラとコンソールアプリの間で通信します
- Windowsのパフォーマンスモニターを使用して、どういうわけかこの情報をフィードします
- ETW
UIでの表示には問題があります。まず、アプリケーション用に考えていたUIと統合されていないため、このためだけにUIを複雑にしたくありません。この診断はめったに行われません。次に、スケジューラには独自のスレッドがあるため、重要なデータ保護が行われます。
別のコンソールウィンドウがおそらく機能するでしょうが、それがあまりにも多くのしきい値ではないかどうか私はまだ心配しています。これはWindowsアプリであるため、自分のコンソールを割り当てることは、IPC通信やノンブロッキング通信について心配する必要がないため、別のコンソールアプリケーション(3)よりもおそらく優れています。ただし、ユーザーは私が割り当てたコンソールを閉じることができ、その場合は問題が発生します。別のプロセスを使用すると、それについて心配する必要はありません。
パフォーマンスモニター用のAPIがあると仮定すると、それは私のアプリとうまく統合されていないか、ユーザーにはわかりません。ETWを使用しても何も解決されません。ランダムなアイデアですが、この情報を何らかの方法で表示する必要があります。
他の人はどう思いますか、私が逃した他の方法はありますか?