你能不能真正审查程序和不同的结构它以从文件内容的部分记忆仅供工作?
例如,如果这是100万行追加到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(300 0文件,但这远远小于以前的预期)
顺便说一句,你真的需要传播数据超过3000个文件,并不会从数据库/二进制文件工作效率更高。 。好吧,也许过度解释或重构不适合在当前的情况下... – CitizenInsane 2012-03-24 14:40:33
我需要生成单独的文件用于并行程序,因此生成3000个文件目前是如何设计整个程序。我解决它类似于你的描述,但我只是写500个文件组。 – twerdster 2012-03-25 19:28:46
很好的阅读,你已经能够重构的东西。关于原始问题,这里有一些有趣的[链接](http://www.codeproject.com/Articles/29959/Changing-FileDescriptor-s-Limit-and-TIME_WAIT-Limi)。 – CitizenInsane 2012-03-25 22:25:07