按照上一篇说的方法,我使用sparse_hash_map替换掉原生的dict,之后进行性能测试的时候发现,如果我们data全部使用SparseDict作为dict的替代,那么其空间性能固然如我们所愿降下来了,但是时间性能却显著恶化。
经过我们反复测试,我们发现,sparse_hash_map的访问效率,在数据过增大的情况下,查询性能会出现显著下降。
然后进一步观察我们的数据表,我们发现我们的data的格式大致都是这样的:
data={
k1:{kk1:d11,kk2:d12……},
k2:{kk2:d11,kk3:d12……},
……
}
其中:
第一层的k1……kn的可能组成一般是int跟tuple,偶尔有str, 数量一般很大且不重复(废话);
第二层的kk1……kkn,数量不多。
在之前的测试中,我们得出结论是SparseDict并不适合做大dict的替代,但是对于小dict,替换性能比较突出。
此时我们想到的优化方案就是讲data里的dict用成两种,第一层的大dict用回内建dict,后面的小dict用成SparseDict,达到折中的目的。
下面是我们采取不同组合方法得到的优化效果(表待补)
可以看到,最终取得了时间性能不恶化的情况下获得较高的空间性能的结果