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\MySharedLog
的 Mutex
,然后同一台机器上不同 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/