c# – MemoryMappedFiles:可以为文件分配多少内存

我有大的CT rawdata文件,最大可以超过20到30GB.对于我们当前部门中的大多数计算机,我们最多只有3GB.但是为了处理数据,我们需要查看所有可用数据.当然,我们可以通过读写函数顺序遍历数据来实现这一点.但有时需要将一些...

我有大的CT rawdata文件,最大可以超过20到30GB.对于我们当前部门中的大多数计算机,我们最多只有3GB.但是为了处理数据,我们需要查看所有可用数据.当然,我们可以通过读写函数顺序遍历数据来实现这一点.但有时需要将一些数据保存在内存中.

目前我有自己的内存管理,我创建了一个所谓的MappableObject.每个rawdatafile包含20000个结构,每个结构显示不同的数据.每个MappableObject都引用文件中的一个位置.

在C#中,我创建了一个部分工作的机制,如果需要,它会自动打开和取消映射数据.从几年前我就知道了MemoryMappedFiles,但是在.NET 3.5中我拒绝使用它,因为我在.NET 4.0中知道它本身可用.

所以今天我尝试了MemoryMappedFiles,发现不可能分配尽可能多的内存.如果我有一个32位系统,并且我想分配20GB,由于超出逻辑地址空间的大小,它不起作用.这对我来说是清楚的.

但有没有办法像我一样处理这么大的文件?我还有什么机会?你们是怎么解决这些问题的?

谢谢
马丁

解决方法:

我所知道的唯一限制是您可以映射的文件的最大视图的大小,该视图受地址空间的限制.内存映射文件可能大于地址空间. Windows需要在进程的地址空间的连续块中映射文件视图,因此最大映射的大小等于最大空闲地址空间块的大小.文件系统本身强加了对文件总大小的唯一限制.

看一下这篇文章:Working with Large Memory-Mapped Files

本文标题为:c# – MemoryMappedFiles:可以为文件分配多少内存

基础教程推荐