我有多个asp.net网络应用程序服务于一组文件.在提供文件之前,会定期更新文件,但如果文件正在使用,则无法更新文件.
我可以通过使用命名的互斥锁解决此问题,其中名称是文件路径(当然替换无效字符).我在其他情况下使用过这个,但你可以看到效率低下.一次只能有一个进程提供文件.
读取器/写入器锁是完美的,但它们被设计为在单个进程中工作.另外,我必须为每个可能更新的文件创建一个读取器/写入器锁,并且有很多.
我真正需要的是一个可以像互斥锁一样命名的读/写锁.有这样的事吗?或者可以使用现有的锁创建这样的东西?
我们有一个使用频繁的.Net 3.5应用程序,它读取"创建昂贵的数据"并对其进行缓存.但是,我们在读取缓存文件和写入缓存文件时遇到很多错误.我从StackOverflow论坛获得的一些建议是:
这是读取和写入文件的正确方法吗?请指教.
private XmlDocument ReadFromFile(string siteID, Type StuffType)
{
XmlDocument result = null;
var fsPath = FileSystemPath(siteID, StuffType.Name);
result = new XmlDocument();
using (var streamReader = new StreamReader(fsPath))
//using (var fileStream = new FileStream(fsPath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
result.Load(streamReader);
}
//GC.Collect();
return result;
}
private readonly object thisObject = new object();
private void WriteToFile(string siteID, XmlDocument stuff, string fileName)
{
var fsPath = FileSystemPath(siteID, fileName);
lock (thisObject)
{
//using (var fileStream = new FileStream(fsPath, FileMode.Open, FileAccess.Read, …Run Code Online (Sandbox Code Playgroud)