On Windows, calls to memihash() and maintaining the istate.name_hash and istate.dir_hash HashMaps take significant time on very large repositories. This series of changes reduces the overall time taken for various operations by reducing the number calls to memihash(), moving some of them into multi-threaded code, and etc. Note: one commenter in https://github.com/git-for-windows/git/pull/964 pointed out that memihash() only handles ASCII correctly. That is true. And fixing this is outside the purview of this patch series. [jes: renamed and reformatted a few places, and replaced global constants by 1-bit fields, in the hopes to make the contribution a smoother ride.] Jeff Hostetler (5): name-hash: eliminate duplicate memihash call hashmap: allow memihash computation to be continued name-hash: precompute hash values during preload-index name-hash: specify initial size for istate.dir_hash table name-hash: remember previous dir_entry during lazy_init_name_hash cache.h | 6 +++ hashmap.c | 14 +++++++ hashmap.h | 2 + name-hash.c | 116 ++++++++++++++++++++++++++++++++++++++++++++++++-------- preload-index.c | 2 + read-cache.c | 3 ++ 6 files changed, 127 insertions(+), 16 deletions(-) base-commit: 5588dbffbd61e4906e453808c6ad32f792fea521 Published-As: https://github.com/dscho/git/releases/tag/memihash-perf-v1 Fetch-It-Via: git fetch https://github.com/dscho/git memihash-perf-v1 -- 2.11.1.windows.1