c# - c# 100个应用同时写入日志时如何实现同步

标签 c# .net multithreading synchronization locking

public class Logwriter {
    public Void WriteXml()
    {
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(@"C:\Log_Data.xml");

        XmlElement newelement = xmlDoc.CreateElement("entry");
        XmlElement xmldata = xmlDoc.CreateElement("data");
                    XmlElement xmlcontent = xmlDoc.CreateElement("content");

                    xmldata.InnerText ="1234" ;
        xmlcontent.InnerText ="Stackoverflow";

                    newelement.AppendChild(xmldata);
        newelement.AppendChild(xmlcontent);

                    xmlDoc.DocumentElement.AppendChild(newelement);
        xmlDoc.Save(@"C:\Log_Data.xml");
}}

上面的 WriteXml() 函数一次可以被 100 个应用程序调用,所以我必须防止 IOException 错误。 我可以使用锁避免这些异常,所以我该怎么做。 请解释我在编写 xml 时必须锁定哪个对象

最佳答案

听起来你在谈论一个命名的互斥锁;您可以使用名称类似于 Global\MySharedLogMutex,然后同一台机器上不同 session 中的不同应用程序将可以看到它。这允许每个 exe 在一段时间内(以托管方式)获取独占锁。

但是!

  • 每个应用程序都有一个单独的日志会更简单、更有效
  • xml 不是一种很好的日志格式,尤其是如果您每次要读/写整个文件以添加一行时;在日志条目 #10 上听起来不错,在日志条目 #12,301,023 上听起来不太好

例如:

Mutex m = new Mutex(false, @"Global\MySharedLog");
...

m.WaitOne();
try {
    // do some work here
} finally {
    m.ReleaseMutex();
}

关于c# - c# 100个应用同时写入日志时如何实现同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12890079/

相关文章:

c# - 如何正确连接现有的密封类?

c# - 如何为 Windows Phone 棋盘游戏编写简单的 AI 代码?

java - 如何在每次值增加时得到通知

c# - 异常: System. ComponentModel.Win32Exception : Invalid data at System. Diagnostics.Process.Start_shell

c# - 具有空访问器或没有访问器的属性之间的区别

c# - 复制本地 = True 与添加可部署依赖项

.net - 按特定顺序对 SelectList 进行排序

c - 基于优先级的多线程?

Java线程等待和通知方法

c# - 如何从属性网格中删除描述区域?