相关疑难解决方法(0)

是否有全局命名的读/写锁?

我有多个asp.net网络应用程序服务于一组文件.在提供文件之前,会定期更新文件,但如果文件正在使用,则无法更新文件.

我可以通过使用命名的互斥锁解决此问题,其中名称是文件路径(当然替换无效字符).我在其他情况下使用过这个,但你可以看到效率低下.一次只能有一个进程提供文件.

读取器/写入器锁是完美的,但它们被设计为在单个进程中工作.另外,我必须为每个可能更新的文件创建一个读取器/写入器锁,并且有很多.

我真正需要的是一个可以像互斥锁一样命名的读/写锁.有这样的事吗?或者可以使用现有的锁创建这样的东西?

.net locking

14
推荐指数
1
解决办法
8168
查看次数

该进程无法访问该文件,因为它正被另一个进程使用:正确读取\写入文件的方式:使用频繁的应用程序 - 第二部分

我们有一个使用频繁的.Net 3.5应用程序,它读取"创建昂贵的数据"并对其进行缓存.但是,我们在读取缓存文件和写入缓存文件时遇到很多错误.我从StackOverflow论坛获得的一些建议是:

  • 一个.以"FileShare.Read"模式读取文件,并以"FileShare.ReadWrite"模式写入文件.(当系统执行读/写操作时,应该使用"FileAccess"模式.)
  • 湾 在每次读取和写入操作后使用"GC.Collect".(在每次读取/写入操作后执行此操作会产生什么性能影响.)

这是读取和写入文件的正确方法吗?请指教.

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)

.net c# asp.net

1
推荐指数
1
解决办法
6486
查看次数

标签 统计

.net ×2

asp.net ×1

c# ×1

locking ×1