我有大的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-03-04
- C# – NetUseAdd来自Windows Server 2008和IIS7上的NetApi32.dll 2023-09-20
- C#集合查询Linq在项目中使用详解 2023-06-09
- 使用c#从分隔文本文件中插入SQL Server表中的批量数据 2023-11-24
- c#中利用Tu Share获取股票交易信息 2023-03-03
- C#通过GET/POST方式发送Http请求 2023-04-28
- 京东联盟C#接口测试示例分享 2022-12-02
- C# Winform实现石头剪刀布游戏 2023-01-11
- C#中类与接口的区别讲解 2023-06-04
- c#读取XML多级子节点 2022-11-05