我们的游戏程序会将所有玩家的数据初始化到内存中。我的目标是减少不必要的内存占用。我追踪了程序并发现“for”很占用内存。
例如:
例如:
Line # Mem usage Increment Line Contents
================================================
52 @profile
53 11.691 MB 0.000 MB def test():
54 19.336 MB 7.645 MB a = ["1"] * (10 ** 6)
55 19.359 MB 0.023 MB print recipe.total_size(a, verbose=False)
56 82.016 MB 62.656 MB for i in a:
57 pass
print recipe.total_size(a, verbose=False):8000098字节
问题是我如何释放那62.656 MB的内存。
P.S.
对不起,我知道我的英语不是很好。我将感谢每个人阅读这个。:-)
for
语句只是为列表a
创建了一个迭代器对象,它实际上仅仅是一个对a
的引用以及一个用于跟踪迭代器在列表中位置的索引值。没有更多其他操作。 - Martijn Pietersa
;在我的64位Mac上,一个包含100万个字符串的列表需要近44 MB的内存;即使对于32位系统,报告的7MB也远远不够。我使用sys.getsizeof()
函数计算了这个大小,以测量单个“1”字符串乘以100万的内存需求,再加上具有100万个引用的列表对象的大小。 - Martijn Pieters'1'
字符串被内部化(在我的测试中是这样的); 那么列表确实只占用7.6 MB,因此这是一致的。这里的另一个候选者是recipe.total_size()
函数。 - Martijn Pieters