在我的应用程序(c#3.5)中,有很多进程非常频繁地访问单个xml文件(读取和写入)。访问该文件的代码放在由很多其他应用程序引用的程序集中。例如,Windows服务可能会实现MyFileReaderWriter类(在前面提到的程序集中定位)并使用此类的读/写方法。
我正在寻找以最少的锁定来读取和创建/附加文件的最佳/最快方式。
表示,定期缓存文件数据和刷新新内容不是一种选择。我忘了提到我目前使用XDocument(LInq2Xml基础设施)来读取/写入文件内容。
答案 0 :(得分:4)
如果通过写信你只是附加到文档,那么试试这个
http://msdn.microsoft.com/en-us/library/aa302289.aspx
基本上你的xml文档是一个带有开始和结束标记的shell。标签之间是一个include引用,它引用另一个文件,另一个文件是xml文档的主体。 对于写入操作,这要快很多倍,因为每次写入时都不必加载xml文件,并且每次都不写入整个文件。
使用XmlWriter类,您可以非常轻松地将节点附加到正文文件的末尾。
当其他人想要阅读xml时,他们只需打开文档,他们的xml解析器“知道”加载和解析这两个文件。
希望这有帮助。
答案 1 :(得分:3)
首先,确保通过单个实例完成对XML文档的所有访问。
然后在访问它的函数的开头放置一个锁定机制(等待解锁)并在最后解锁它。
答案 2 :(得分:1)
您的意思是数据至关重要? 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
}