1

我有一个应用程序,其中初始化涉及从文件(〜> 10 GB)中读取非常大的数据,然后对这些数据(类型为Dictionary)执行一些计算。即使我的数据是固定的/从未更改过,初始化步骤每次都需要几个小时。我想做的是以某种方式使用一个进程将这些数据预加载到内存中,并在同一台机器上的另一个进程直接从其中读取所有数据一次,并且没有任何 COPY。到目前为止,我已经找到了几种方法:

  • .Net 远程处理远程对象。然而,这种方法承担了编组成本,因此不适用于我的情况,因为数据传输会在某一时刻产生两倍的内存。

  • 内存映射文件。这个选项似乎仍然需要数据复制,就我而言,它并不理想,因为我需要复制所有 >10GB 的数据。我发现了一些关于使用不安全访问内存地址的文章,但我不完全知道它是如何工作的。

  • WCF 命名管道。这种方法似乎类似于远程处理,并且仍然需要数据传输。

我的方案最有效的方法是什么?

4

2 回答 2

1

如果您要将数据放入字典中,为什么不使用任何流行的 nosql 键值存储(couchbase、riak、redis),那么任何进程都可以处理数据。如果你完全反对这个想法,你总是可以使用 NancyFx 框架在“主机”应用程序中托管一个本地休息服务端点,那么任何其他需要使用预加载数据的应用程序都可以与提供的服务进行交互主人。

于 2013-07-19T18:10:48.460 回答
0

我不知道您将如何有效地将 10GB 的数据保存在内存中。无论您采用何种方法在内存中存储 10GB 数据,都会过于频繁地使用系统缓存,并且会降低整个系统的速度。

如果可以的话,我建议使用数据库。如果您不能使用数据库,请尝试存储您的初始化数据并在需要时通过一些缓存读取部分。

于 2013-07-19T17:49:30.967 回答