我需要优化我的应用程序的RAM使用率。
请不要劝我在编写Python代码时不必关注内存问题。我使用非常大的默认字典所以存在内存问题(是的,我也希望代码快一些)。目前我的内存占用量为350MB,并且还在增长。我已经无法使用共享主机,如果我的Apache打开更多进程,内存会增加两到三倍……而这是很昂贵的。
我进行了广泛的剖析,并且知道我的问题出在哪里。
我有几个大字典(> 100K条目)并且键是Unicode。一个字典从140字节开始并快速增长,但更大的问题在于键。Python优化内存中的字符串(或者我读过这样的说法),以便查找可以是ID比较。("interning"它们)。不确定这对于unicode字符串也适用(我无法将它们“intern”)。
存储在字典中的对象是元组列表(一个对象,一个整数,一个整数)。
my_big_dict[some_unicode_string].append((my_object, an_int, another_int))
我已经发现拆分为多个字典是值得的,因为元组占用了很多空间......
我发现在使用字符串作为键之前对它们进行哈希可以节省RAM!但是,不幸的是,在我的32位系统上遇到了生日冲突。(附带问题:在32位系统上是否有可用的64位键字典?)
Python 2.6.5在Linux(生产)和Windows上都可以使用。 有没有关于优化字典/列表/元组内存使用的技巧? 我甚至想使用C语言编写——我不在乎这个非常小的代码片段是否丑陋。它只是一个单一的位置。
提前感谢!