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