gpt4 book ai didi

file - 使用 fopen 增加 Windows 中 Matlab 中打开文件描述符的最大数量

转载 作者:太空宇宙 更新时间:2023-11-03 19:52:51 26 4
gpt4 key购买 nike

我有一个程序需要在 Matlab 中保存大约 3000 个打开的文件描述符。这样做的原因是,如果我不让它们保持打开状态,我需要打开和关闭它们超过 10 万次,即 3 亿次开闭操作。考虑到每次都会附加每个文件,并且 fopen 和 fclose 每次可能需要超过一秒的时间(文件很大,即 100mb 以上),应该清楚这种情况是 Not Acceptable 。

我知道文件句柄的 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)

(在此之后,“help”等基本命令会失败,您需要运行fclose all)。

一些网络搜索发现其他人(在劣质的问答论坛上)也有同样的问题,但没有简单的解决方案(例如 this Mathworks forum post。)


当我遇到 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'))

每次从 Matlab 中进行 java 调用时都会有成本(我想是几毫秒),所以你真的在进行 1,000,000 次写入,我会分析你的代码,并寻找收集数据的方法在内存中编写代码,并在需要时执行更少、更大的批量写入。

另外请记住,您需要单独关闭它们,例如

for ix = 1:length(streamwriters)
streamwriters{ix}.close();
end

关于file - 使用 fopen 增加 Windows 中 Matlab 中打开文件描述符的最大数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9845303/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com