我在寫一個讀取大約500個文件的matlab程序。每個文件有20,000行,每行有1個數字。該程序試圖用這些數字構建20,000 * 500的矩陣。 數字以雙精度存儲,因此每個數字爲8個字節。所以我預計這需要20,000 * 500 * 8個字節,大約是1E8,即100MB。然而這個程序耗盡了我的16GB內存。程序運行時,我看到內存使用量穩步上升,GB按GB增長。我在Ubuntu 14.04上使用Matlab R2015b。爲什麼我的matlab程序使用這麼多的內存?
發生了什麼事?非常感謝您的關注。
下面是完整的代碼
clear all;
% number of rna bits in the file
filesize = 20532
maxFiles = 480;
rnaCounts = NaN(filesize,maxFiles);
myFolder = '~/_STATS/data3/RNASeqV2/UNC__IlluminaHiSeq_RNASeqV2/Level_3';
filePattern = fullfile(myFolder, '*genes.normalized_results');
theFiles = dir(filePattern);
rnaCounts = NaN(filesize,length(theFiles));
for k = 1 : length(theFiles)
mrnaFilename = strtrim(theFiles(k).name);
fprintf(1, 'Now reading mrnaFile %d %s \n', k, mrnaFilename);
% read rna file
fullFileName = fullfile(myFolder, mrnaFilename);
rnafid = fopen(fullFileName);
if rnafid < 0
fprintf('====ERROR OPENING RNA FILE =====================');
end
rnaline = fgets(rnafid);
lc = 1; % line counter
while ischar(rnaline) && feof(rnafid) ~= 1
rnaline = fgets(rnafid);
rnaSplit = strsplit(rnaline);
% write to the matrix
rnaCounts(lc,k) = str2num(rnaSplit{2});
lc = lc + 1;
end
fclose(rnafid);
end
要嘗試的一件事是刪除第一個'rnaCounts'實例;它沒有用,也很大,儘管這不應該是把內存吹起來的東西。 – drhagen
另外,請嘗試'str2double'而不是'str2num'。那不是'str2num'的意思。 'help str2num'和'help str2double' – drhagen
你確定內存是被Matlab保存的,而不僅僅是文件系統緩存嗎?例如如果你殺了Matlab,所有的內存立即清除? – drhagen