我有一个 WCF 服务(在 NetTCP 上的控制台应用程序中实例化),该服务具有静态数据(大容量),它在负载时被实例化。
我有这个控制台应用程序的多个实例同时运行,它们都在做相同的静态数据初始化,有没有一种方法可以让我拥有一个数据源并在进程之间共享数据,这样每个进程就不必消耗大量内存?
我有一个 WCF 服务(在 NetTCP 上的控制台应用程序中实例化),该服务具有静态数据(大容量),它在负载时被实例化。
我有这个控制台应用程序的多个实例同时运行,它们都在做相同的静态数据初始化,有没有一种方法可以让我拥有一个数据源并在进程之间共享数据,这样每个进程就不必消耗大量内存?
您可以使用内存映射文件;但由于 Windows 保护应用程序的方式,每个进程都必须拥有自己的内存。
来自http://msdn.microsoft.com/en-us/library/dd997372.aspx:
非持久文件是与磁盘上的文件无关的内存映射文件。当最后一个进程完成对文件的处理时,数据会丢失,文件会被垃圾回收器回收。这些文件适用于为进程间通信 (IPC) 创建共享内存。
使用任何类型的“共享”数据,您将拥有同步访问的额外任务。
快速的解决方案是编写另一个您首先运行的专用服务。它会加载一次数据,并根据需要将其提供给其他服务实例。
更强大的解决方案是将数据存储在所有服务都连接到的数据库或缓存层中。缓存层是一个不错的选择,因为如果它不在缓存中(保留更多当前设计),您的服务可以延迟加载它,并且它可以很快(在内存中)。一些缓存选项包括: