我有大的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:可以为文件分配多少内存
- Unity3D实现渐变颜色效果 2023-01-16
- .NET CORE DI 依赖注入 2023-09-27
- C# 使用Aspose.Cells 导出Excel的步骤及问题记录 2023-05-16
- 如何使用C# 捕获进程输出 2023-03-10
- user32.dll 函数说明小结 2022-12-26
- c# 模拟线性回归的示例 2023-03-14
- WPF使用DrawingContext实现绘制刻度条 2023-07-04
- Unity Shader实现模糊效果 2023-04-27
- Oracle中for循环的使用方法 2023-07-04
- 在C# 8中如何使用默认接口方法详解 2023-03-29