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