我有大的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:可以为文件分配多少内存


基础教程推荐
- Unity shader实现高斯模糊效果 2023-01-16
- C#中 Json 序列化去掉null值的方法 2022-11-18
- C#调用摄像头实现拍照功能的示例代码 2023-03-09
- C# 解析XML和反序列化的示例 2023-04-14
- C#获取指定目录下某种格式文件集并备份到指定文件夹 2023-05-30
- Unity 如何获取鼠标停留位置下的物体 2023-04-10
- C#中的Linq to JSON操作详解 2023-06-08
- c# – USING块在网站与Windows窗体中的行为不同 2023-09-20
- C#通过标签软件Bartender的ZPL命令打印条码 2023-05-16
- 实例详解C#实现http不同方法的请求 2022-12-26