public static class LogWriter
{
private static ReaderWriterLockSlim writeLock = new ReaderWriterLockSlim();
public static void WriteExceptionLog(string content)
{
#if DEBUG
MessageBox.Show(content);
#endif
WriteLog(content, Constant.EXCEPTION_LOG_PATH);
}
public static void WriteLog(string content, string path)
{
try
{
writeLock.EnterWriteLock();
string directory = Path.GetDirectoryName(path);
if (!Directory.Exists(Path.GetDirectoryName(directory)))
Directory.CreateDirectory(directory);
using (StreamWriter writeFile = new StreamWriter(path, true))
{
content = DateTime.Now + " : " + content;
writeFile.WriteLine(content);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
writeLock.ExitWriteLock();
}
}
}我有一个写日志的类。因为我正在异步地写入日志,所以我需要放置一个锁,并在写入完成时释放它,但这似乎是一个有点笨拙的解决方案,甚至可能对性能不利。
处理这个问题的更好方法是什么?
发布于 2012-10-23 14:21:03
出于性能原因,也为了避免在登录和注销之间出现非常不同的行为,我建议每个线程运行一个缓冲日志文件。
每个线程一个
对应的是:
的情况下隐藏最后一条日志记录
要进一步实现实时,您必须登录内存,并开发一个专用接口来提取日志请求,但这种日志通常保留给硬实时嵌入式应用程序。
用于低CPU消耗的安全日志记录的其他解决方案(低级C编程):
临界区在共享内存中放置一个日志记录缓冲区,被观察的进程作为日志记录管理器进程,具有更高的优先级,它作为日志记录在触发器/触发器机制后面的消费者和生产者之间的通信:一个指针分配下的关键部分。
如果观察到的进程崩溃,则不会丢失任何日志记录,因为共享内存段已附加到日志管理器进程。
发布于 2012-10-23 14:28:08
在每次日志请求时打开、写入和关闭文件都是多余且低效的。
在日志类上,使用一个缓冲区,并将该缓冲区的内容写入文件,可以是每X个请求、关闭一次,也可以是每Y分钟一次。
https://stackoverflow.com/questions/13024433
复制相似问题