c# - 跨多个应用程序域使用文件时读取\写入文件的最佳方式

标签 c# file-io locking

我正在使用 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 锁对象吗?它在不同进程的情况下是否有效?

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

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


这个链接怎么样...

Is there a way to check if a file is in use?

这是最好的方法还是我应该使用互斥体?

请指导..

最佳答案

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

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

此外,如果您使用的是 C# 4.0,则可以使用 Memory-Mapped I/O为此目的。

关于c# - 跨多个应用程序域使用文件时读取\写入文件的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10039108/

相关文章:

python - 如果有GIL,那么python中多线程环境中的锁有什么用呢?

c# - 检查服务器是否可以通过 IPv6 访问?

c - 使用 fwrite 存储在文本文件中的数据在 C 中不可读

java - 使用来自文本文件的输入在 java 中构建树

PHP x86如何在没有外部程序的情况下获得> 2 GB文件的文件大小?

java - 使用 Java 队列锁

java - 如果不会发生争用,读取时是否需要同步

c# - linq中的分组和平均

c# - 具有不同配置的多个 SignalR 集线器

c# - 如何将程序集 'netstandard, Version=2.0.0.0' 添加到我的 tvOS Xamarin 项目?