多线程小应用程序和日志记录

Aln*_*dru 0 c# logging multithreading

我这里有一个小问题.我写了一个小的多线程应用程序,它没有做太多,只是连接到一些资源,reades几个字段写入日志,就是这样.如果一切都被记录下来,我想知道什么.以下是日志记录的代码:

private TextWriter textWriter;
private TextWriter errorWriter;

public Logger(string filePath, string errorLogFile)
{
    textWriter = TextWriter.Synchronized(File.AppendText(filePath));
    errorWriter = TextWriter.Synchronized(File.AppendText(errorLogFile));
}

public void WriteToLog(string text)
{
    textWriter.WriteLine(text);
}
    ...
Run Code Online (Sandbox Code Playgroud)

所以,当我说我有100个线程时,这将管理所有写入日志的数据,还是会跳过一些线程?我将在main中创建一个logger实例并将其传递给executor:

        for (int i = 0; i < threadNumber; i++)
        {
            Executor executor = new Executor(logger)
        }
Run Code Online (Sandbox Code Playgroud)

Dan*_*rth 6

没有跳过确实发生.您的代码是线程安全的.
您正在使用TextWriter.Synchronized创建用于写入文件的线程安全包装器.synchronized TextWriter使用该[MethodImpl(MethodImplOptions.Synchronized)] 属性实现,该属性与对此方法所包含的实例执行锁定基本相同.
也就是说,发生的锁定导致所有其他线程等待,直到当前正在写入的一个线程完成为止所以.
更好的方法是创建一个类,其中包含一个线程安全的非阻塞队列,您可以将日志条目放入其中,另一个线程处理它们并将它们放入日志文件中.如果您的应用程序中正在进行大量日志记录,那么很可能会提高性能.