当文件在多个应用程序域中使用时,读取/写入文件的最佳方式
本文关键字:文件 读取 方式 最佳 应用程序域 | 更新日期: 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。
不同进程之间不会共享静态变量。
您可以:
- 锁定文件本身(将FileShare.None传递给FileStream构造函数,然后使用该流读取XML),或者
- 使用全局互斥(将非空的名称传递给mutex构造函数)
选项(1)在文件已经锁定的情况下不会阻止(它只会立即抛出异常)-如果您想模拟阻止行为,您必须反复"轮询"文件。另一方面,只有当您的应用程序是唯一访问文件的应用程序时,选项(2)才会起作用。拿起你的毒药。