Mercurial > hg
view contrib/macosx/Readme.html @ 26945:8a256cee72c8 stable
tags: create new sortdict for performance reasons
sortdict internally maintains a list of keys in insertion order. When a
key is replaced via __setitem__, we .remove() from this list. This
involves a linear scan and array adjustment. This is an expensive
operation.
The tags reading code was calling into sortdict.__setitem__ for each tag
in a read .hgtags revision. For repositories with thousands of tags or
thousands of .hgtags revisions, the overhead from list.remove()
noticeable.
This patch creates a new sortdict() so __setitem__ calls don't incur a
list.remove.
This doesn't appear to have any performance impact on my Firefox
repository. But that's only because tags reading doesn't show up in
profiles to begin with. I'm still waiting to hear from a user with over
10,000 tags and hundreds of heads on the impact of this patch.
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Thu, 12 Nov 2015 13:16:04 -0800 |
parents | 4b0fc75f9403 |
children | 2fd3549c8a5f |
line wrap: on
line source
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <!-- This is the second screen displayed during the install. --> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>Read Me - Important Information</title> <style type="text/css"> p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Helvetica} p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px} p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica} p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #000fed} span.s1 {text-decoration: underline} span.s2 {font: 12.0px Courier} </style> </head> <body> <p class="p1"><b>Before you install</b></p> <p class="p2"><br></p> <p class="p3">This is an OS X version of Mercurial that depends on the default Python installation.</p> <p class="p2"><br></p> <p class="p1"><b>After you install</b></p> <p class="p2"><br></p> <p class="p3">This package installs the <span class="s2">hg</span> executable as <span class="s2">/usr/local/bin/hg</span>. See <span class="s2">hg debuginstall</span> for more info on file locations.</p> <p class="p2"><br></p> <p class="p1"><b>Documentation</b></p> <p class="p2"><br></p> <p class="p3">Visit the <a href="https://mercurial-scm.org/">Mercurial web site and wiki</a></p> <p class="p2"><br></p> <p class="p3">There's also a free book, <a href="http://hgbook.red-bean.com/">Distributed revision control with Mercurial</a></p> <p class="p2"><br></p> <p class="p1"><b>Reporting problems</b></p> <p class="p2"><br></p> <p class="p3">If you run into any problems, please file a bug online:</p> <p class="p3"><a href="http://bz.selenic.com/">http://bz.selenic.com/</a></p> </body> </html>