FWIW, ниже приведен фрагмент кода для воспроизведения этой проблемы:
fids = zeros(1,513);
for ix = 1:length(fids)
fids(ix) = fopen(sprintf('testfile_%03d.tmp',ix),'w');
end
fids(507:end)
(После этого основные команды, такие как «помощь», не выполняются, необходимо выполнить fclose all
).
Небольшой поиск в Интернете поднимает других людей (на подчиненных форумах по вопросам и ответам) с теми же проблемами, но без простых решений (например, в этом сообщении на форуме 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'))
Каждый раз, когда вы делаете java-вызов из Matlab, вы платите (я думаю, несколько мс), так что вы действительно выполняете 1 000 000 записей, я бы профилировал ваш код и искал способы сбора код в памяти и выполнять меньше, более крупные пакетные записи при необходимости.
Также помните, что вам нужно закрыть их по отдельности, например,
for ix = 1:length(streamwriters)
streamwriters{ix}.close();
end