dict.__getitem__ 在字符串上的性能
我在一个自己实现的文件系统中使用了一个 dict
来存储缓存的路径。这个 dict
中的所有键都是字符串。经过一些性能分析,我发现查找这个字典的速度很慢,成了瓶颈。我了解到 dict
是经过高度优化的。不过,cProfile 的精确度并没有显示字典查找代码的内部工作情况。
有没有什么原因导致在 Python 3 中字符串的查找会这么慢呢?我能做些什么来解决这个问题或者提高性能吗?
1 个回答
0
我觉得有必要看看源代码,了解是什么造成了差异。最近我尝试把Python2的代码转换成Python3,但发现查找的速度还是很慢,Python2的速度大约比Python3快30%。这里不是实际的代码,而是一个示例类,用来找出问题到底出在哪里。示例代码:
"""
python3
"""
from time import time
from random import randint
class Wooaah:
def __init__(self):
self.length=100000
self.a=dict()
self.b=dict()
self.count=int()
self.s=float()
self.e=float()
def dummy_data(self):
for i in range(self.length):
self.a[i]=time()
self.b[i]=time()
def setod(self):
self.s=time()
for i in self.a:
if self.b.get(i):
self.count+=1
self.e=time()
a=Wooaah()
a.dummy_data()
a.setod()
print(a.count)
print(a.e-a.s)