0

我真的不想在我的高频交易软件中引入任何延迟,同时我需要每秒存储数千行日志。1 毫秒的延迟会很大,我只同意 0.01-0.05 毫秒的延迟。

*现在*我只是在启动时在内存中分配 500 Mb,将日志存储在那里,当应用程序完成时,我将此日志放在磁盘上。

但是现在我意识到我想要更多的日志,并且在应用程序执行期间我想要它们。所以我现在想在应用程序执行期间存储日志(可能每分钟一次或每 10 分钟一次)。有多慢StreamWriter.WriteLine?它会比“添加到预先分配的集合”慢吗?

我应该StreamWriter.WriteLine直接使用(是同步还是异步,AutoFlush选项会影响性能吗?)。我还可以使用BlockingCollection将项目添加到日志,然后使用专用线程来处理此阻塞集合并将日志存储在另一个线程中的磁盘上。

4

3 回答 3

1


  • 重新发明轮子


  • 使用日志框架
  • 为每个记录器正确配置记录器和级别
  • 对内存使用同步日志记录(它简单快速,但在驱动器上存在事件持久性问题)和IO异步记录(很难正确、缓慢、更难测试)记录器

如果您还没有这样做,请查看log4netNLog,这将是一个很好的起点。

于 2012-07-22T20:27:59.987 回答
0

可能您可以将日志存储在循环缓冲区中并生成一个新的执行线程,该线程只会将数据从共享内存中的缓冲区发送到磁盘。

于 2012-07-22T19:59:32.020 回答
0

按照 Andre Calil 的建议使用 log4net。它记录到 SQL、磁盘和诸如此类的东西,并且非常可定制。起初它看起来有点复杂,但值得付出努力。

您需要的可能是RollingFileAppender. log4net 在 nuget 中,但您应该阅读 log4net 站点上的文档。首先查看 appender 配置。

于 2012-07-22T20:13:18.443 回答