在我的应用程序(c#3.5)中,有很多进程非常频繁地访问单个xml文件(读取和写入)。访问该文件的代码放在由很多其他应用程序引用的程序集中。例如,Windows服务可能会实现MyFileReaderWriter类(在前面提到的程序集中定位)并使用此类的读/写方法。

我正在寻找以最少的锁定来读取和创建/附加文件的最佳/最快方式。

表示,定期缓存文件数据和刷新新内容不是一种选择。

我忘了提到我目前使用XDocument(LInq2Xml基础设施)来读取/写入文件内容。

有帮助吗?

解决方案

首先,确保通过单个实例完成对XML文档的所有访问。

然后在访问它的函数的开头放置一个锁定机制(等待解锁)并在最后解锁它。

其他提示

如果通过写信你只是附加到文档,那么试试这个

http://msdn.microsoft.com/en-us/library /aa302289.aspx

基本上你的xml文档是一个带有开始和结束标记的shell。标签之间是一个include引用,它引用另一个文件,另一个文件是xml文档的主体。 对于写入操作,这要快很多倍,因为每次写入时都不必加载xml文件,并且每次都不写入整个文件。

使用XmlWriter类,您可以非常轻松地将节点附加到正文文件的末尾。

当其他人想要读取xml时,他们只需打开文档,他们的xml解析器“知道”。加载和解析这两个文件。

希望这有帮助。

您的意思是数据至关重要? XML文件不是您的应用程序专门使用的吗?

简单(并且可能足够好)锁定对文件的IO访问的方法是创建一个提供“读写令牌”的静态工厂类。每个I / O操作必须锁定的对象。

public static object GetReadWriteToken(String fileName)
{
    //use a hashtable to retreive an object, with filename as key
    return token;
}

只需在阅读和写作时这样做:

lock(GetReadWriteToken(@"C:\important.xml"))
{
    //io code
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top