मैं एक मैटलैब प्रोग्राम लिख रहा हूं, जो लगभग 500 फाइलें पढ़ता है। प्रत्येक फ़ाइल में 20,000 लाइनें होती हैं, प्रत्येक पंक्ति पर 1 संख्या होती है। कार्यक्रम इन नंबरों के साथ 20,000 * 500 का मैट्रिक्स बनाने की कोशिश करता है। संख्याएं डबल के रूप में संग्रहित की जाती हैं, इसलिए प्रति संख्या 8 बाइट्स। तो मैं उम्मीद करता हूं कि यह 20,000 * 500 * 8 बाइट्स लेगा, जो लगभग 1E8 है, यानी 100 एमबी। और फिर भी यह कार्यक्रम मेरी 16 जीबी मेमोरी समाप्त करता है। जैसे-जैसे प्रोग्राम चलता है, मैं देखता हूं कि मेमोरी का उपयोग तेजी से बढ़ रहा है, जीबी द्वारा जीबी। मैं उबंटू 14.04 पर मैटलैब आर2015 बी का उपयोग कर रहा हूं।मेरा मैटलैब प्रोग्राम इतना मेमोरी क्यों उपयोग करता है?
क्या हो रहा है? आपके ध्यान के लिए बहुत धन्यवाद।
यहाँ पूर्ण कोड
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
इसके अलावा, 'str2num' की बजाय 'str2double' आज़माएं। यह बिल्कुल 'str2num' नहीं था। 'help str2num' और' help str2double' – drhagen
क्या आप वाकई मैटलैब द्वारा मेमोरी आयोजित कर रहे हैं और न केवल फाइल सिस्टम कैश है? जैसे यदि आप मैटलैब को मार देते हैं, तो क्या सभी मेमोरी तुरंत साफ़ हो जाती है? – drhagen