sha1 hesaplamasını satır yerine sabit bloklar üzerinden yap.

Bu yamayla hesaplamada %15 civarında bir hızlanma görülüyor.
Heap peak aynı kalırken, heap total'de ciddi düşme var.

Çeşitli dosyalar ve bir iki paketle denedim. Faik, uygunsa
2007 branch'ına da taşıyalım bunu.

İlerde saçma try: except: kısmını da kaldırırsak olacak
bu iş :)
This commit is contained in:
Gürer Özen
2007-03-02 08:41:42 +00:00
parent 5dbb040408
commit dd7cd28097
+13 -2
View File
@@ -433,8 +433,19 @@ def sha1_file(filename):
try:
m = sha.new()
f = file(filename, 'rb')
for line in f:
m.update(line)
while True:
# 256 KB seems ideal for speed/memory tradeoff
# It wont get much faster with bigger blocks, but
# heap peak grows
block = f.read(256 * 1024)
if len(block) == 0:
# end of file
break
m.update(block)
# Simple trick to keep total heap even lower
# Delete the previous block, so while next one is read
# we wont have two allocated blocks with same size
del block
return m.hexdigest()
except IOError:
raise FileError(_("I/O Error: Cannot calculate SHA1 hash of %s") % filename)