可以通过2个不同的进程共享相同的DLL数据吗?

时间:2010-06-02 17:23:29

标签: c# dll process shared

我有两个不同的C#应用​​程序同时运行。

我希望他们两个都能够访问DLL的同一“实例”(也在C#中)。

DLL保存了一些我想要返回到两个应用程序要求的数据。

我的DLL是线程安全的,所以我希望这是可能的,但我不确定如何。

非常感谢任何帮助或建议。

5 个答案:

答案 0 :(得分:5)

进程空间将不同,因此,例如,DLL中的全局变量将特定于每个单独的进程。内存中的代码可能会被共享(Windows通常使用引用计数来提高该部分的效率)。

如果您想要共享在两个进程之间在DLL中访问的信息,那么似乎有必要使用某种IPC(进程间通信)机制,如套接字,共享内存,管道,等

答案 1 :(得分:0)

DLL没有实例,它在主机进程中加载​​。在两个应用程序中引用程序集并使用其类/方法。

如果您想避免为两个应用程序部署相同的程序集,可以put it in the GAC

答案 2 :(得分:0)

这是可能的。您可以在GAC中安装DLL(需要强名称程序集),以便两个应用程序都可以轻松访问它。

或者将其粘贴在一个文件夹中,让两个应用程序都搜索该文件夹中的dll。

MSDN support article

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
            <assemblyIdentity name="MyAssembly2"  culture="neutral" publicKeyToken="307041694a995978"/>
            <codeBase version="1.0.1524.23149" href="FILE://C:/Myassemblies/MyAssembly2.dll"/>
         </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

答案 3 :(得分:0)

我不知道这是否可以在C#中完成,但在C ++中,如果要共享的信息不太复杂,您也可以使用共享内存部分。您只需使用例如互斥锁

来同步对此资源的访问

关于这个主题的好文章:http://www.codeproject.com/KB/threads/SharedMemory_IPC_Threads.aspx

玩得开心

答案 4 :(得分:0)

如果您的DLL创建了一个名为MemoryMappedFile(在内存或磁盘上),那么这两个应用程序可以共享DLL创建的内存。每个应用程序将具有指向共享内存的不同指针,但实际上将共享内存。 您必须为共享内存使用相同的名称,并且您自己就可以在进程之间保持线程安全。 (命名的信号量或互斥量将起作用,CriticalSection不会。)