问题描述
问题是这样的,有两个进程(或者更多的进程),启动的时候都从同一个文件读取数据,在各自的进程中建立对象模型。这两个进程还都可以修改数据。那么,问题来了,如果进程A修改了数据,进程B要适时的获得修改后的数据,应该采用什么样的解决方案来实现呢?因为程序的基础通信架构采用的是WCF,考虑过使用WCF进行通信来同步两个进程间的数据,但设计到的数据维度比较多,如果每一个属性的修改都需要来一次通信的话,这样肯定对性能就会产生很大的影响了。不知道,各位大神是否有更好的方案,烦请赐教!!!谢谢!!!
解决方案
解决方案二:
可以用信号量等进行互斥
解决方案三:
System.IO.FileSystemWatcher监测指定目录或文件的指定属性,如大小、最后修改时间、重命名等事件用内存映射文件或者命名管道(基于内存分页文件映射来实现的双工通信),只需要连接管道进行通信或者用win32API共享内存也可以
解决方案四:
引用1楼bdmh的回复:
可以用信号量等进行互斥
正解
解决方案五:
引用1楼bdmh的回复:
可以用信号量等进行互斥
版主大人可否说的具体点?之前没有了解过信号量进行互斥操作方面的技术。谢谢!
解决方案六:
可以考虑用日志同步写的一方不停地append数据[或命令]到文件,读的一方使用文件的position来读取文件,然后执行命令,完成同步.如果是双向的,那么使用两个文件.好处是可以做到无阻塞,在高吞吐量的环境下最好用这个.
解决方案七:
没有太多实时性要求的话,标准做法是用数据库。
解决方案八:
多谢大家的解答,这个问题我现在的处理方案是这样的,通信仍然使用的是WCF,但是采用了AOP技术去拦截Model中属性值的设置,如果有新的属性值,则直接通过WCF发送给其他的进程,由其他的进程去同步各自的Model。基本的框架已经出来了,就是对集合的处理还需要在优化一些!