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

时间:2012-02-03 09:43:22

标签: c# multithreading logging

我这里有一个小问题。 我写了一个小的多线程应用程序,它没有做太多,它只是连接到一些资源, 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);
}
    ...

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

        for (int i = 0; i < threadNumber; i++)
        {
            Executor executor = new Executor(logger)
        }

1 个答案:

答案 0 :(得分:6)

确实没有跳过。您的代码是线程安全的。
您正在使用TextWriter.Synchronized创建用于写入文件的线程安全包装器。同步TextWriter使用[MethodImpl(MethodImplOptions.Synchronized)]属性实现,该属性基本上与对此方法包含的实例进行锁定相同。
话虽如此,发生的锁定会导致所有其他线程等待,直到当前正在写入的一个线程完成为止 更好的方法是创建一个包含thread safe non-blocking queue的类,在其中放置日志条目,以及一个处理它们的线程并将它们放入日志文件中。如果您的应用程序中正在进行大量日志记录,则很可能会提高性能。