也许您会选择管理内存映射文件并查看此处。在 .NET 2.0 中,您必须使用 PInvoke 来执行该功能。从 .NET 4.0 开始,您就拥有了MemoryMappedFile的高效内置功能。
也看看:http:
//msdn.microsoft.com/en-us/library/dd997372.aspx
您无法有效地将 5GB 数据存储在内存中。在 32 位操作系统中每个进程有 2 GB 限制,在64 位 Windows-on-Windows中每个 32 位进程有 4 GB 限制
所以你有选择:
采用 Google 的 Chrome 方式(和 FireFox 4)并在进程之间维护一些数据。如果您的应用程序在 64 位操作系统下启动并且您有某些理由将应用程序保持为 32 位,则它可能适用。但这不是那么容易的方法。如果您没有 64 位操作系统,我想知道您从哪里获得 >5GB 的 RAM?
如果您有 32 位操作系统,那么任何解决方案都将是基于文件的。当您尝试将数据保存在内存中时(通过我想知道您如何在 32 位和每个进程限制 2 GB 的内存中处理它们)操作系统只是不断地将部分数据(内存页面)交换到磁盘并在您时一次又一次地恢复它们访问它。您会遭受很大的性能损失,并且您已经注意到了(我从您的问题描述中猜到了)。主要问题操作系统无法预测您何时需要一个数据以及何时需要另一个数据。因此,它只是试图通过在磁盘上/从磁盘上读取和写入内存页面来做到最好。
因此,您已经以低效的方式间接使用磁盘存储,MMF 只是以高效和可控的方式为您提供相同的解决方案。
您可以重新构建您的应用程序以使用 MMF,操作系统将帮助您进行高效缓存。自己进行快速测试 MMF 可能足以满足您的需求。
无论如何,除了基于文件的之外,我没有看到任何其他解决方案可以处理大于可用 RAM 的数据集。并且通常更好地直接控制数据操作,尤其是当数据量如此之大并且需要处理时。