我有以下函数将图像转换为哈希值列表(使用 PIL):
def _GetImageHash(image):
st = time.time()
image_list = list(image.getdata())
(columns, rows) = image.size
hash_vals = [0]*rows
for i in xrange(0,rows):
hash_vals[i] = hash(tuple(image_list[i*columns:(i+1)*columns]))
print "_GetImageHash time taken: ", time.time() - st
return hash_vals, image_list
在另一个函数中,我对许多图像文件调用此方法,并存储结果列表。但是,我观察到此函数计算哈希值所需的时间会随着每次调用而显着增加。如果我更改调用的顺序,它不会改变观察到的行为(所有图像的大小相同,因此该函数计算散列值所需的时间应该没有显着差异)。事实上,如果我这样做:
image1_hash, image1_list = _GetImageHash(image1)
image2_hash, image2_list = _GetImageHash(image1)
image3_hash, image3_list = _GetImageHash(image1)
image4_hash, image4_list = _GetImageHash(image1)
image5_hash, image5_list = _GetImageHash(image1) ...
报道的时间是这样的:
_GetImageHash time taken: 0.672996044159
_GetImageHash time taken: 1.40435290337
_GetImageHash time taken: 2.10946083069
_GetImageHash time taken: 2.84965205193
_GetImageHash time taken: 3.57753205299
_GetImageHash time taken: 4.71754598618
_GetImageHash time taken: 5.10348200798
_GetImageHash time taken: 5.83603620529
_GetImageHash time taken: 6.57408809662
_GetImageHash time taken: 7.30649399757
_GetImageHash time taken: 7.26073002815
_GetImageHash time taken: 7.94218182564
似乎发生这种情况是因为我正在存储列表。但是为什么性能会因为这里的内存使用而受到影响呢?可以做些什么来解决这个问题,以便内存使用不会对时间性能产生如此巨大的影响吗?