画像をハッシュ値のリストに変換する次の関数があります(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
リストを保存しているため、これが発生しているようです。しかし、ここでメモリ使用量が原因でパフォーマンスが低下するのはなぜですか? メモリ使用量が時間のパフォーマンスに大きな影響を与えないように、これに対処するために何かできることはありますか?