难道你不能真正审查你的程序并以不同的方式构造它,以便仅从文件内容的部分内存表示中工作吗?
例如,如果要将 100 000 行附加到 3000 个文件(即甚至不需要对文件中已有的内容进行任何表示),您可以这样做:
%% Main processing
function [] FullProcess()
%[
for block = 1:100,
% Partial processing
lines = processBlock(block);
% Save step
pushToFiles(block, lines);
end
%]
与:
% Partial processing in memory
function [lines] = processBlock(block)
%[
% Preallocate
lines = cells(1000, 3000);
% Do the processing for current block
...
lines{500, 12} = 'kikou';
...
%]
还有:
%% Save partial work
function [] = pushToFiles(block, lines)
%[
fcount = size(lines, 2);
lcount = size(lines, 1);
for fi = 1:fcount,
[fid, msg] = fopen(fprintf('f%i', fi), 'a'); % Open in append mode
if (fid < 0), error(msg); end
for li = 1:lcount,
fprintf(fid, lines{li, fi});
end
fclose(fid);
end
%]
这减少了 100 fopen/fclose 的事情(虽然减少了 3000 个文件,但这远低于之前的预期)