我有一个程序需要在Matlab中保存大约3000个打开的文件描述符.这样做的原因是,如果我不打开它们,我需要打开和关闭它们超过10万次,这意味着3亿次开放式关闭操作.考虑到每个文件被附加每次和的fopen和FCLOSE可以向上的第二各自的采取(文件较大即100MB +)应该很清楚这种情况是不能接受的.
我知道文件句柄的Windows限制设置为10000,但Matlab拒绝使用fopen打开超过512个文件.我无法弄清楚如何强迫它增加这个数字.
有人知道如何更改512限制吗?它在哪里定义?它甚至与Matlab有关吗?
FWIW,下面是一些重现此问题的代码:
fids = zeros(1,513);
for ix = 1:length(fids)
fids(ix) = fopen(sprintf('testfile_%03d.tmp',ix),'w');
end
fids(507:end)
Run Code Online (Sandbox Code Playgroud)
(在此之后,像"帮助"这样的基本命令会失败,您需要运行fclose all).
一些网络搜索让其他人(在劣质Q&A论坛上)遇到同样的问题,但没有简单的解决方案(例如这个Mathworks论坛帖子.)
当我遇到Matlab限制时,我的第一直觉总是转向Java.例如:
streamwriters = cell(1,513);
for ix = 1:length(streamwriters)
strName = sprintf('testfile_2_%03d.tmp',ix);
streamwriters{ix} = java.io.FileOutputStream(strName);
end
streamwriters{513}.write(uint8('Some data to write'))
Run Code Online (Sandbox Code Playgroud)
每次从Matlab内部进行java调用都会产生一些成本(我想几毫秒),所以你真正做了1,000,000次写入,我会分析你的代码,并寻找在内存中收集代码的方法并在需要时执行更少,更大的批量写入.
还要记住,你需要单独关闭它们,例如
for ix = 1:length(streamwriters)
streamwriters{ix}.close();
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1019 次 |
| 最近记录: |