我在多个问题中都看到了这一点,但许多公认的答案是自相矛盾的。
有人说,如果您希望跨应用程序和域使用对象的单个实例(实际上只是一个同步实例),则只能使用IPC。
其他人说,在GAC中的程序集中使用单例模式将导致数据共享,因为如果DLL已经由另一个程序集加载,则GAC将共享一个实例(提供lib有一个单例模式)。
有人帮我解决了这个问题,我需要在多个线程中的多个应用程序中共享一个全局对象,并且在深入了解它之前,我需要知道它是否可能没有IPC,比如WCF。我更喜欢使用GAC,因为我的库更像一个框架,它将由我和其他第三方开发人员开发的一套应用程序使用。此外,速度是一个主要问题,序列化/反序列化对象以不断同步它可能会增加太多的延迟,而更多的是来自多个位置的单个实例。
发布于 2016-03-15 18:14:40
不,应用程序的每个实例都在为所有加载的程序集使用自己的内存。甚至可以在一个应用程序中分离两个单例实例(通过使用https://learn.microsoft.com/en-us/dotnet/framework/app-domains/application-domains)。
单例模式可以使用交叉程序集,但这将始终在一个AppDomain内。
因此,两个应用程序不共享内存/对象实例。
这是需要的行为,因为您不希望其他应用程序访问线程/Dispatcher/AppDomain(并在应用程序中加载自定义程序集)/Application类实例
如果您需要在应用程序之间“共享”内存或对象,则需要序列化数据并通过通信层之类的东西“传输”它们。
例如:
https://stackoverflow.com/questions/36018856
复制相似问题