题
在我的应用程序(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
}
不隶属于 StackOverflow