所以,我想在c#中为我正在开发的应用编写一个记录器。但是,由于我喜欢效率,我不想在执行期间反复打开和关闭日志文件。
我想我想将所有事件写入RAM,然后在应用程序退出时写入日志文件一次。这是一个好习惯吗?如果是这样,我应该如何实施呢?
如果这不是一个好习惯,会是什么?
(目前我还没有使用Windows的事件日志。)
答案 0 :(得分:6)
但是,由于我喜欢效率,我不想在执行期间反复打开和关闭日志文件
没有。这是因为你喜欢过早的优化。
我想我想将所有事件写入RAM,然后在应用程序退出时写入日志文件一次。这是一个好习惯吗?如果是这样,我应该如何实施呢?
如果您喜欢效率,为什么要为日志条目浪费大量内存?
如果这不是一个好习惯,会是什么?
如果您希望在应用程序崩溃时丢失所有日志(因为它无法将日志写入磁盘)。你为什么一开始就创建了日志?
答案 1 :(得分:3)
您必须考虑可能遇到的一些问题:
您可以简单地在应用程序运行时保持文件打开(至少FileShare.Read
以便监视它),或者考虑编写批量日志行,在一组方法之后调用write方法,甚至使用计时器。
答案 2 :(得分:0)
如果你的应用程序崩溃了,你就会丢失所有日志。如果您在适当的时候将日志刷新到磁盘,那就更好了。懒惰写道:
将日志条目排队到单独的记录器线程(即将它们存储在某个类中,并将类实例排队到生产者 - 消费者队列)。在记录器线程中,等待输入队列超时。如果有日志条目,请将其存储在本地缓存队列中。
如果(超时触发)或(达到存储的某些高水位标记),则将所有缓存的日志条目写入文件并刷新文件缓冲区。
RGDS, 马丁