我有一个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,但是对于随机访问文件的特定视图更有用。我的文件访问从开头一直到结束。
我的案例中是否有不同的技术或库?或者这是如此预期?
答案 0 :(得分:1)
我假设您使用的是SQLServer。如果是这样,Service Broker & SQLNotificaiton或Query notification可能是您的朋友。我认为,您需要更多的推送消息传递模型,它会自动将更改传播回服务(如果db中有更改)。因此,避免重新启动内存/资源密集型进程,因此无需重新映射重量级字典。