gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:54:28 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com