Wcf 在多个进程之间共享静态数据

Wcf 在多个进程之间共享静态数据,wcf,multiple-instances,Wcf,Multiple Instances,我有一个WCF服务(在NetTCP上的控制台应用程序中实例化),该服务有静态数据(大容量),在负载上实例化 我有这个控制台应用程序的多个实例同时运行,它们都在执行相同的静态数据初始化,有没有一种方法可以让我拥有一个数据源并在进程之间共享数据,这样每个进程就不必消耗大量内存?您可以使用内存映射文件;但由于Windows保护应用程序的方式,每个进程都必须有自己的内存 发件人: 非持久化文件是与磁盘上的文件不关联的内存映射文件。最后一个进程处理完文件后,数据将丢失,并通过垃圾回收回收该文件。这些文件适

我有一个WCF服务(在NetTCP上的控制台应用程序中实例化),该服务有静态数据(大容量),在负载上实例化


我有这个控制台应用程序的多个实例同时运行,它们都在执行相同的静态数据初始化,有没有一种方法可以让我拥有一个数据源并在进程之间共享数据,这样每个进程就不必消耗大量内存?

您可以使用内存映射文件;但由于Windows保护应用程序的方式,每个进程都必须有自己的内存

发件人:

非持久化文件是与磁盘上的文件不关联的内存映射文件。最后一个进程处理完文件后,数据将丢失,并通过垃圾回收回收该文件。这些文件适用于为进程间通信(IPC)创建共享内存


对于任何类型的“共享”数据,您都将有同步访问的额外任务。

快速解决方案是编写另一个您首先运行的专用服务。它将加载数据一次,并根据需要将其提供给其他服务实例

更健壮的解决方案是将数据存储在所有服务都连接到的数据库或缓存层中。缓存层是一个不错的选择,因为如果它不在缓存中(保留更多当前设计),您的服务可以延迟加载它,并且它可以很快(在内存中)。一些缓存选项包括:


同样的问题,每个进程都必须在自己的内存中有“缓存”。在我看来,这实际上只是引入了另一个进程,它在内存中包含了所有相同的内容,从而使内存负载变得更糟