Написах скрипт на Python, който чете съдържанието на два файла, първият е сравнително малък файл (~30KB), а вторият е по-голям файл ~270MB. Съдържанието на двата файла се зарежда в структура от речникови данни. Когато се зареди вторият файл, бих очаквал необходимото количество RAM да бъде приблизително еквивалентно на размера на файла на диска, може би с малко допълнителни разходи, но като гледам използването на RAM на моя компютър, изглежда постоянно отнема ~2GB (около 8 пъти размера на файла). Съответният изходен код е по-долу (вмъкнати са паузи, за да мога да видя използването на RAM на всеки етап). Редът, който консумира големи количества памет, е "tweets = map(json.loads, tweet_file)":
def get_scores(term_file):
global scores
for line in term_file:
term, score = line.split("\t") #tab character
scores[term] = int(score)
def pause():
tmp = raw_input('press any key to continue: ')
def main():
# get terms and their scores..
print 'open word list file ...'
term_file = open(sys.argv[1])
pause()
print 'create dictionary from word list file ...'
get_scores(term_file)
pause()
print 'close word list file ...'
term_file.close
pause()
# get tweets from file...
print 'open tweets file ...'
tweet_file = open(sys.argv[2])
pause()
print 'create dictionary from word list file ...'
tweets = map(json.loads, tweet_file) #creates a list of dictionaries (one per tweet)
pause()
print 'close tweets file ...'
tweet_file.close
pause()
Някой знае ли защо е така? Притеснението ми е, че бих искал да разширя изследванията си до по-големи файлове, но бързо ще изчерпя паметта си. Интересното е, че използването на паметта не изглежда да се увеличава забележимо след отваряне на файла (тъй като мисля, че това просто създава указател).
Имам идея да опитам да превъртя файла един ред наведнъж и да обработя каквото мога и да съхраня само минимума, който ми е необходим за бъдещи справки, вместо да зареждам всичко в списък с речници, но просто ми беше интересно да видя дали приблизително 8 пъти множител на размера на файла в паметта при създаване на речник е в съответствие с опита на други хора?