最佳日志记录性能

本文关键字:性能 记录 日志 最佳 | 更新日期: 2023-09-27 17:56:20

我有以下环境:

  1. Windows XP Professional with .NET 2.0
  2. 相对旧的PC硬件(10年),具有3 GB内存。
  3. 一个复杂的基于.NET的系统,由许多服务,进程,本地SQL服务器和WinForms GUI组成。

问题:

  1. 每个进程/服务将数据记录到其本地文件中。
  2. 每个日志都会立即刷新到文件流中。
  3. 有时,当许多进程同时记录数千条消息时,由于严重的文件IO操作,PC的性能会变差。禁用日志记录证明性能恢复正常。

目标:增强日志记录性能,以便系统保持响应。

我目前的解决方案理念:

  1. 进程不会直接记录到其本地文件,而是使用命名管道将日志消息发送到本地服务。
  2. 本地日志服务为每个要记录的内容的进程打开一个命名管道和一个相应的工作线程。
  3. 本地日志服务缓存从每个进程接收的日志消息,直到可配置的日志消息量
  4. 可用或经过可配置的时间量,然后日志服务将所有日志消息写入相应的进程日志文件。

我试图通过此解决方案实现的目标:

  1. 文件 IO 写入操作不会阻止客户端执行。
  2. 日志操作/调用将变为异步。
  3. 文件访问是可控的,并且在可配置的时间量后仅发生一次。

问题:

  1. 这个解决方案好吗?性能可以进一步提高吗?
  2. 是否有任何开箱即用的进程间日志记录库/框架?

最佳日志记录性能

由于您仅限于 .NET 2.0,因此请查看异步操作的BeginInvokeEndInvoke

如果可能,请尝试对应用程序进行多线程处理,以便记录器不在调度程序线程上工作。

如果这仍然没有帮助,那么请考虑使用 PInvoke 进行C++重叠的 IO。