C#中的快速分布式内存访问

时间:2013-05-27 11:57:20

标签: c# shared-memory tcplistener inter-process-communicat

我有一个C#WCF服务,在Dictionary<File,byte[]>中托管120 GB内存,可以非常快速地访问文件内容,这对我来说非常合适。访问时,文件内容被包装在MemoryStream中并读取

需要每天重新启动此服务,以便从数据库加载一些可能每天都在更改的静态数据。重启需要花费很多时间,因为需要再次将大量数据加载到内存中

所以我决定在同一台机器上以不同的进程托管这个内存,并通过套接字访问它。数据处理将始终启动并运行。 TcpListener / Client和NetworkStream的使用方式与以下类似

memoryStream.Read(position.PositionData, 0, position.SizeOfData);

position.NetworkStream.Write(position.PositionData, 0, position.SizeOfData);

问题是:这比在同一进程中托管内存要慢10倍。预计会放缓,但10倍是太多了。

我想到了MemoryMappedFiles,但是对于随机访问文件的特定视图更有用。我的文件访问从开头一直到结束。

我的案例中是否有不同的技术或库?或者这是如此预期?

1 个答案:

答案 0 :(得分:1)

我假设您使用的是SQLServer。如果是这样,Service Broker & SQLNotificaitonQuery notification可能是您的朋友。我认为,您需要更多的推送消息传递模型,它会自动将更改传播回服务(如果db中有更改)。因此,避免重新启动内存/资源密集型进程,因此无需重新映射重量级字典。