我有一个应用程序,它有一个循环,是“调度程序”的一部分,它始终运行并且是应用程序的核心。非常像一个游戏循环,只是我的应用程序是一个WPF应用程序,它不是一个游戏。自然地,应用程序在许多方面都进行了日志记录,但是Scheduler会进行一些敏感的监视,有时从日志中不可能知道可能发生了什么错误(以及错误的我不是指例外)或当前状态。实时日志记录
由于调度程序的内部循环以很短的时间间隔运行,因此无法在其中执行基于I/O的日志记录(或使用事件查看器)。首先,您需要实时观看它,其次,日志文件的大小会非常快。所以我在想的方式来表达这个数据的实时用户,有些事情我认为:在实时
- 显示的数据在UI
- 使用AllocConsole/WriteConsole显示在控制台此信息
- 使用这将显示此信息不同的控制台应用程序,调度和使用管道或其他的IPC技术
- 使用Windows的性能监视器并以某种方式与该信息给它
- ETW 控制台应用程序之间的通信
在UI中显示会有问题。首先它不会与我为我的应用程序考虑的用户界面集成,并且我不想仅为此将界面复杂化。这种诊断只会发生很少。其次,会有一些不平凡的数据保护,因为调度程序有它自己的线程。
一个单独的控制台窗口可能会工作,但我仍然担心,如果它没有太多的门槛。分配我自己的控制台,因为这是一个Windows应用程序,可能会比另一个控制台应用程序更好(3),因为我不需要担心IPC通信和非阻塞通信。但是,用户可以关闭我分配的控制台,在这种情况下会出现问题。通过一个单独的流程,您不必担心。
假设有一个用于性能监视器的API,它将不会与我的应用程序集成得太好,或者对用户来说显然不是。使用ETW也不能解决任何问题,只是一个随机的想法,我仍然需要以某种方式显示这些信息。
别人怎么想的,会有其他方法我错过了吗?
您希望用户如何处理显示的信息?如果您希望收集离线数据以用于以后的分析而对性能影响最小,ETW似乎是一个不错的选择。 – jnoss 2010-04-19 00:23:17
它不适用于以后使用,当有些事情不明显时,电力用户可以排除故障 – 2010-04-19 01:42:35
-1很难理解你的问题究竟是什么,或者你实际上在做什么。 – 2010-04-24 21:42:24