相关疑难解决方法(0)

如何有效地异步登录?

我在我的一个项目中使用Enterprise Library 4进行日志记录(以及其他用途).我注意到我正在做的日志记录有一些成本,我可以通过在单独的线程上进行日志记录来减轻这种成本.

我现在这样做的方法是创建一个LogEntry对象,然后在调用Logger.Write的委托上调用BeginInvoke.

new Action<LogEntry>(Logger.Write).BeginInvoke(le, null, null);
Run Code Online (Sandbox Code Playgroud)

我真正想做的是将日志消息添加到队列中,然后让一个线程将LogEntry实例从队列中拉出并执行日志操作.这样做的好处是日志记录不会干扰执行操作,并且并非每个日志记录操作都会导致在线程池上抛出作业.

如何以线程安全的方式创建支持多个编写器和一个读取器的共享队列?设计用于支持许多编写器(不会导致同步/阻塞)和单个读取器的队列实现的一些示例将非常受欢迎.

关于替代方法的建议也将受到赞赏,但我对改变日志框架并不感兴趣.

c# logging multithreading enterprise-library

32
推荐指数
2
解决办法
3万
查看次数

标签 统计

c# ×1

enterprise-library ×1

logging ×1

multithreading ×1