2

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

该服务需要每天重新启动,以从数据库中加载一些每天都可能发生变化的静态数据。由于需要再次将大量数据加载到内存中,重新启动花费了很多时间

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

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

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

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

我想到了 MemoryMappedFiles,但它们对于随机访问文件的特定视图更有用。我的文件访问从头到尾都是连续的。

在我的情况下是否可以使用不同的技术或库?或者这只是如此预期?

4

1 回答 1

1

我假设您使用的是 SQLServer。如果是这样,Service Broker & SQLNotificaiton Or Query 通知可能是你的朋友在这里。我想,您需要更多的推送消息模型,它会自动将更改传播回服务(如果数据库发生变化)。因此,避免重新启动内存/资源密集型进程,因此无需重新映射您的重量级字典。

于 2013-05-27T12:27:12.867 回答