Performance 使用“伪”访问内存位置;“文件句柄”;在MATLAB中
通过避免将整个数据集加载到内存中来处理大型数据集有很多问题。我的问题正好相反:我编写的代码逐行读取文件,以避免内存溢出问题。然而,我刚刚获得了一个拥有数百GB内存的强大工作站的访问权限,解决了这个问题,使磁盘访问成为瓶颈 问题是,我的代码是使用Performance 使用“伪”访问内存位置;“文件句柄”;在MATLAB中,performance,matlab,Performance,Matlab,通过避免将整个数据集加载到内存中来处理大型数据集有很多问题。我的问题正好相反:我编写的代码逐行读取文件,以避免内存溢出问题。然而,我刚刚获得了一个拥有数百GB内存的强大工作站的访问权限,解决了这个问题,使磁盘访问成为瓶颈 问题是,我的代码是使用fgetl之类的函数逐行访问数据文件的。对于我来说,是否有可能以某种方式将文件句柄f=fopen('datafile.txt')替换为与函数读取文件的方式完全相同的其他文件句柄,但不是从磁盘读取,而是返回存储在内存中的值 例如,我在想,有一个大的单元格数组
fgetl
之类的函数逐行访问数据文件的。对于我来说,是否有可能以某种方式将文件句柄f=fopen('datafile.txt')
替换为与函数读取文件的方式完全相同的其他文件句柄,但不是从磁盘读取,而是返回存储在内存中的值
例如,我在想,有一个大的单元格数组,其中文件内容按行分割,
fgetl
只返回下一个。如果我必须为此编写自己的包装,我该怎么做呢?我想你可能会被卡住了。但是,下次当您想要使用内存映射文件时,请查看memmapfile
,这是可能的,可以编写一个类。然后f=fopen\u bufferedfile('datafile.txt')
将是构造函数,fgetl(f)
将调用方法fgetl
,该方法相当于f.fgetl()
。fopen
、fgetl
和fclose
都是您需要的吗?@Daniel Yep就是这样:我可以用我的新类重载fgetl
和fclose
并替换文件打开的行吗。布里尔@rlbond为指针欢呼,在我已经用低级函数编写了很多代码之后,我遇到了memmapfile
。如果我错了,请纠正我的错误,但是如果我使用memmapfile路径,我会不会仍然处于现在的位置?或者matlab是否能将尽可能多的文件加载到内存中,使其能够轻松处理,从而能够随着资源的增加而很好地扩展?@CharlieB:我认为将这两种方法结合起来是一种可行的方法,一个与现有代码相匹配的类和一个快速实现的memmapfile
。我想你可能会被卡住。但是,下次当您想要使用内存映射文件时,请查看memmapfile
,这是可能的,可以编写一个类。然后f=fopen\u bufferedfile('datafile.txt')
将是构造函数,fgetl(f)
将调用方法fgetl
,该方法相当于f.fgetl()
。fopen
、fgetl
和fclose
都是您需要的吗?@Daniel Yep就是这样:我可以用我的新类重载fgetl
和fclose
并替换文件打开的行吗。布里尔@rlbond为指针欢呼,在我已经用低级函数编写了很多代码之后,我遇到了memmapfile
。如果我错了,请纠正我的错误,但是如果我使用memmapfile路径,我会不会仍然处于现在的位置?或者,matlab是否能将尽可能多的文件加载到内存中,以便于轻松处理,从而在增加资源的情况下可以很好地扩展?@CharlieB:我认为将这两种方法结合起来是一种可行的方法,一个与现有代码相匹配的类,一个快速实现的memmapfile
。