自己写了一个日志工具类LogUtil,单进程版测试和NLog性能一样,多进程版比NLog慢一倍以上,对照NLog,请问NLog多进程写日志比LogUtil快一倍以上的原因?同样使用了Mutex互斥量,NLog还有哪些机制使得它能快一倍以上?
源码和LogUtil、NLog测试代码地址:https://gitee.com/s0611163/LogUtil
需要优化的代码是LogUtilUseMutex.cs
性能问题已解决,git记录中搜"【重要优化】 "查看优化记录,代码架构没变化,只修改了细节,主要是使用FileStream自带的锁,而不是写入时自己用Mutex加锁,也不需要调用Flush。
你的多进程是同时2个进程写磁盘吗,这样是不能提高性能的
我记得高性能的日志是要建立一个缓存,一个进程向缓存中写数据,另一个线程定时将缓存中的数据刷到磁盘上
我不是一味的追求高性能,我看了NLog源码,觉得NLog和我的实现方式没有本质区别,但为什么NLog比我的快1-2倍,我想找出这个原因。当然NLog源码我看的也不是很明白,希望有熟悉的能解答一下,NLog使用了什么机制,使得它比我的快很多?
你说的缓存,或者我知道的什么缓冲、双缓冲,都不在我的考虑范围内,我不是一味追求高性能,只是想找出这一个问题点的原因。
思路: 多进程同时写一个文件,采用方法--->主进程负责写,其他进程负责发送数据到主进程
多进程,每个进程是独立的,我随时会关闭任意进程,而不能影响其它进程的日志写入。NLog源码中搜pipe和socket,我确定对于这种写文件日志,NLog没有使用这样的方式。