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

问题描述 投票:1回答:1

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

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

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

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

c# ipc gac
1个回答
2
投票

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

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

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

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


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

例如:

  • TCP / IP
  • '共享'内存(命名管道)
© www.soinside.com 2019 - 2024. All rights reserved.