当文件在多个应用程序域中使用时,读取/写入文件的最佳方式

本文关键字:文件 读取 方式 最佳 应用程序域 | 更新日期: 2023-09-27 18:30:07

我正在使用一个XML文件来存储值。可以通过多种方法访问此XML文件。

Private object lockObject = new object() 
Method1
 {
    Lock(this.lockObject)  
  {
      MyCommonMethod()  
  }
 } 
Timer.ElapseEvent 
{  
  Lock(this.lockObject)  
  {    
  MyCommonMethod()  
  } 
} 

   MyCommonMethod()
     {  
 // Read/Write to XML file.  
 var element = XElement.Load(path);  
 // some operations  
   element.save(path) 
} 

现在,这个类被多个项目(服务)使用,这些项目又被组合到一个项目中。

我可以在类中使用STATIC锁对象吗?在不同进程的情况下,它能工作吗

因此,他们有可能同时使用该文件,有时会给我一个错误,即尽管我保留了LOCK,但不同的线程拥有该文件。

在这种情况下,最好的解决方案是什么?请引导。


这个链接怎么样。。。

有没有办法检查文件是否正在使用?

这是最好的方式还是我应该和穆特克斯一起去??

请引导。。

当文件在多个应用程序域中使用时,读取/写入文件的最佳方式

看起来这不是"不同应用程序域"的问题,而是"不同进程"的问题。无论如何,您可以应用严格的同步化解决方案,如互斥:

mutex.WaitOne();
MyCommonMethod();
mutex.ReleaseMutex();

此外,如果您使用的是C#4.0,则可以为此目的使用内存映射I/O。

不同进程之间不会共享静态变量。

您可以:

  1. 锁定文件本身(将FileShare.None传递给FileStream构造函数,然后使用该流读取XML),或者
  2. 使用全局互斥(将非空的名称传递给mutex构造函数)

选项(1)在文件已经锁定的情况下不会阻止(它只会立即抛出异常)-如果您想模拟阻止行为,您必须反复"轮询"文件。另一方面,只有当您的应用程序是唯一访问文件的应用程序时,选项(2)才会起作用。拿起你的毒药。