你能不能真正審查程序和不同的結構它以從文件內容的部分記憶僅供工作?
例如,如果這是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