我有一个应用程序,它有一个循环,是“调度程序”的一部分,它始终运行并且是应用程序的核心。很像一个游戏循环,只是我的应用程序是一个 WPF 应用程序,它不是一个游戏。自然地,应用程序会在很多点上进行日志记录,但调度程序会进行一些敏感的监控,有时仅从日志中就不可能知道可能出了什么问题(我说的错误不是指异常)或当前状态。
因为调度程序的内部循环运行间隔很短,所以您不能在其中执行基于文件 I/O 的日志记录(或使用事件查看器)。首先,您需要实时观看,其次日志文件的大小会增长得非常快。所以我正在考虑如何将这些数据实时显示给用户,我考虑了一些事情:
- 在 UI 中实时显示数据
- 使用 AllocConsole/WriteConsole 在控制台中显示此信息
- 使用不同的控制台应用程序来显示此信息,使用管道或其他 IPC 技术在调度程序和控制台应用程序之间进行通信
- 使用 Windows 的性能监视器并以某种方式将这些信息提供给它
- ETW
在 UI 中显示会有问题。首先,它没有与我为我的应用程序考虑的 UI 集成,我不想仅仅为此而使 UI 复杂化。这种诊断只会很少发生。其次,会有一些重要的数据保护,因为调度程序有它自己的线程。
一个单独的控制台窗口可能会起作用,但我仍然担心它是否不是太大的阈值。分配我自己的控制台,因为这是一个 Windows 应用程序,可能会比不同的控制台应用程序 (3) 更好,因为我不需要担心 IPC 通信和非阻塞通信。但是,用户可以关闭我分配的控制台,在这种情况下会出现问题。使用单独的过程,您不必担心它。
假设有一个用于性能监视器的 API,它不会与我的应用程序很好地集成或对用户来说很明显。使用 ETW 也解决不了任何问题,只是一个随机的想法,我仍然需要以某种方式显示这些信息。
别人怎么想,会不会有其他我错过的方式?