GAC中的库由多个应用程序使用,是否共享相同的对象?

时间:2016-03-15 18:06:24

标签: c# ipc gac

我已经在多个问题中看到了这一点,但是许多公认的答案都是矛盾的。

有人说如果你想跨应用程序和域使用一个对象的单个实例(实际上只是一个同步的实例),那么只能使用IPC。

其他人说在GAC中使用单例模式会导致数据被共享,因为如果DLL已经被另一个程序集加载(如果lib具有单例模式),GAC将共享一个实例。

有人帮我解决这个问题,我需要在多个线程中的多个应用程序之间共享一个Global对象,如果没有IPC(如WCF)甚至可能,我需要先了解它。我更喜欢使用GAC,因为我的库更像是一个框架,无论如何都将由我和其他第三方开发人员开发的一套应用程序使用。此外,速度是一个主要问题,序列化/反序列化对象以不断地同步它可能会增加太多的延迟,更像是从多个位置引用的单个实例。

1 个答案:

答案 0 :(得分:2)

不,应用程序的每个实例都在为所有已加载的程序集使用它自己的内存。甚至可以在一个应用程序中分隔两个单例实例(使用AppDomains

单例模式可以跨程序集使用,但这将始终位于一个AppDomain中。

因此两个应用程序不共享内存/对象实例。

这是所需的行为,因为您不希望其他应用程序访问您的Thread / Dispatcher / AppDomain(并在您的应用程序中加载自定义程序集)/ Application类实例

如果您需要在应用程序之间“共享”内存或对象,则需要序列化数据并通过通信层等方式“传输”它们。

例如:

  • TCP / IP
  • '共享'内存(命名管道)
  • 文件