【发布时间】:2011-07-27 22:43:56
【问题描述】:
我的 CT 原始数据文件很大,最大可能超过 20 到 30GB。对于我们部门当前的大多数计算机,我们最多只有 3GB。但是为了处理数据,我们需要遍历所有可用数据。当然,我们可以通过 read 和 write 函数顺序遍历数据来做到这一点。但有时需要在内存中保留一些数据。
目前我有自己的内存管理,我创建了一个所谓的 MappableObject。每个 rawdatafile 包含 20000 个结构,每个结构都显示不同的数据。每个 MappableObject 都指向文件中的一个位置。
在 C# 中,我创建了一个部分工作的机制,如果需要,它会自动对数据进行 mps 和取消映射。几年前我就知道 MemoryMappedFiles,但在 .NET 3.5 中我拒绝使用它,因为我知道在 .NET 4.0 中它会原生可用。
所以今天我尝试了 MemoryMappedFiles,发现无法分配所需的内存。如果我有一个 32 位系统,并且我想分配 20GB,由于超出了逻辑地址空间的大小,它不起作用。这对我来说很清楚。
但是有没有办法像我一样处理这么大的文件?我还有什么机会?你们是怎么解决这些问题的?
谢谢 马丁
【问题讨论】:
标签: c# memory memory-management dynamic-memory-allocation