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:
+13
-2
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user