我开始使用log4net.async来使用单独的线程进行日志记录,但性能并没有像我最初预期的那样提高,我理解这样做的原因是我们记录的一些字符串非常长,因为它们很长描述收到的消息的属性。
例如,我们可以这样做:
theLogger.Debug(msg.ToString());
当调用“ToString()”方法时,它可能会生成一个表示消息的非常长的字符串,实际生成它可能需要一段时间(慢速反序列化等)。虽然对我来说记录消息很重要,但我希望在单独的线程而不是当前运行的线程上“字符串化”消息,以便我当前运行的线程可以继续处理。我如何让log4net在单独的线程上评估“ToString()”结果或“stringify”消息对象?
答案 0 :(得分:1)
如果要将字符串创建推迟到以后的某个时间点(可能在单独的线程中),您可以创建一个包含Func<object, string>
的包装器,该包装器仅在需要时才会被调用。然后,该包装器也可以将调度发送到单独的线程。
此外,我建议您对当前的字符串操作以及使用Func
invokcation调度到单独线程的开销执行一些基准测试。