none
如何在进程间共享数据? RRS feed

  • 问题

  • 我是个C++程序员,最近在写C#程序。有一个C++中容易解决的问题,在C#中找不到解决办法。
    例如,我有一个单实例(singleton)对象,他维护了一个系统范围内唯一的资源,他被放在一个动态库中,可以供多个程序调用,
    class Singleton
    {
    static Singleton *me;
    
    public:
    Singleton *GetSingleton()
    {
     if(me == null)
     {
      me = new Singleton();
     }
     return me;
    }
    };
    
    #pragma data_seg(".shared")
    Singleton *Singleton::me = NULL;
    #pragma data_seg()
    #pragma comment(linker, "/section:.shared,RWS") 
    
    
    以上C++代码可使Singleton::me这个静态变量成为进程间共享的,因此可以保证在进程间共享唯一的一个实例。
    但是C#的静态变量不是进程间共享的,这个动态库每加载一次会有一个不同的静态成员副本,我也没找到类似上面C++的解决方法,请问如何能解决我遇到的问题?

    LHL
    2011年6月14日 4:23

答案

  • 推荐使用WCF服务用于进程间通信.把你的Singleton写成一个WCF服务,地址可以是这样的"net.pipe://localhost/yourapp",然后你的所有进程都能访问了,WCF服务可以配置为单实例,参见InstanceContextModeAttribute属性


    也可以用你习惯的方法写个C++DLL,然后利用互操作调用它

     


    2011年6月14日 6:56
  • 用Remoting的Singleton SAO对象就可以。
    LHL
    • 已标记为答案 lhlzhxh 2011年6月21日 2:10
    2011年6月21日 2:10

全部回复

  • 推荐使用WCF服务用于进程间通信.把你的Singleton写成一个WCF服务,地址可以是这样的"net.pipe://localhost/yourapp",然后你的所有进程都能访问了,WCF服务可以配置为单实例,参见InstanceContextModeAttribute属性


    也可以用你习惯的方法写个C++DLL,然后利用互操作调用它

     


    2011年6月14日 6:56
  • 用Remoting的Singleton SAO对象就可以。
    LHL
    • 已标记为答案 lhlzhxh 2011年6月21日 2:10
    2011年6月21日 2:10