我有大的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:可以为文件分配多少内存
基础教程推荐
- C#中参数的传递方式详解 2023-06-27
- C#使用SQL DataAdapter数据适配代码实例 2023-01-06
- C#实现归并排序 2023-05-31
- C#使用Chart绘制曲线 2023-05-22
- C#使用NPOI将excel导入到list的方法 2023-05-22
- 浅谈C# 构造方法(函数) 2023-03-03
- Unity虚拟摇杆的实现方法 2023-02-16
- C#执行EXE文件与输出消息的提取操作 2023-04-14
- C# TreeView从数据库绑定数据的示例 2023-04-09
- 如何用C#创建用户自定义异常浅析 2023-04-21
