我们有一个使用频繁的.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, FileShare.ReadWrite))
using (var streamWriter = new StreamWriter(fsPath))
{
stuff.Save(streamWriter);
}
//GC.Collect();
}
}
Run Code Online (Sandbox Code Playgroud)
如果要同步访问资源,则有多个选项,具体取决于上下文.有几个(通用)情况:
单进程,单线程
无需同步.
单进程,多线程
使用像lock或的简单锁定机制ReaderWriterLockSlim.
多个流程,单机
使用(命名)Mutex.互斥体不是很快.更多关于底层的表现.
多个进程,多台机器
现在它开始变得有兴趣了..NET没有针对此的现成解决方案.我可以想到两个解决方案:
在这种情况下
,当然最后的解决方案是通用解决方案.对于Ajit Goel,它就像创建读/写文件的集中服务一样简单.然后你有一个文件管理员控制iets文件.
另一种解决方案是将所有文件存储在中央数据库中,让他进行所有同步.
性能
如果性能开始成为问题,您可以尝试创建缓存.
| 归档时间: |
|
| 查看次数: |
6486 次 |
| 最近记录: |