底层的读取数据作为一个单独的进程,上层的数据处理作为另外的一个单独的进程,而顶层的数据应用有可能又是一个单独的进程。
因为之间有大数据量的传递,所以内存的申请,维护,释放是一个必须考虑的问题。我如果将这些模块分成COM对象来处理的话是可行的。也可以做到进程间数组数据的通信和交互。但是COM的进程外通信采用的PROXY/STUB DLL来进行数据的列集和散集。据我所知在进行数据传递的时候,本质上COM组件端和客户端的内存申请和释放一般都由组件端申请和客户端释放。表面上是这样,但实际是在COM的散集过程中,已经将保存数据的内存销毁,而在客户端的Proxy的列集过程中重新申请了内存并存放数据。
也就是说这中间其实进行了内存的拷贝和释放。针对大数据量来说这样就不合理了,可不可以在COM中不使用内存拷贝的方式,而采用共享内存的方式来进行数据的传递呢?
请各位指教.Ths

解决方案 »

  1.   

    大数据量不适合用COM,共享内存是最好的方式。
    当然如果不用多进程,改用多线程的话最容易解决
      

  2.   

    进程外COM中的内存使用机制是不是有一个拷贝的过程啊?
    如果是需要进程间的共享内存有哪些方式?我所知道的只有CreateMapFile,具体怎么用我也不清楚。能给讲一下吗?或者给我个例子。谢谢!
      

  3.   

    以前写的一个用FileMapping进行通讯的一个类
    http://blog.csdn.net/zzz3265/archive/2008/09/23/2966756.aspx
      

  4.   

    CreateFileMapping是一种方式,如果数据较少也可以用DLL的共享数据区。
      

  5.   

    如果是DLL共享数据区该怎么做呢?
      

  6.   

    在DLL中加入类似下面的代码:
    #pragma data_seg("Shared")
    // 这里定义的数据就是进程间共享的,定义数据时必须初始化。
    #pragma data_seg()
    #pragma comment(linker, "/section:Shared,RWS")
      

  7.   

    COM的进程内组件算不算是DLL数据共享的一种方式?