Mercurial > public > mercurial-scm > hg-stable
diff mercurial/util.py @ 9097:431462bd8478
fix memory usage of revlog caches by limiting cache size [issue1639]
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Thu, 09 Jul 2009 17:10:07 -0500 |
parents | 8ec39725d966 |
children | bbc78cb1bf15 7116494c48ab |
line wrap: on
line diff
--- a/mercurial/util.py Thu Jul 09 11:59:12 2009 +0200 +++ b/mercurial/util.py Thu Jul 09 17:10:07 2009 -0500 @@ -115,6 +115,33 @@ return f +def lrucachefunc(func): + '''cache most recent results of function calls''' + cache = {} + order = [] + if func.func_code.co_argcount == 1: + def f(arg): + if arg not in cache: + if len(cache) > 20: + del cache[order.pop(0)] + cache[arg] = func(arg) + else: + order.remove(arg) + order.append(arg) + return cache[arg] + else: + def f(*args): + if args not in cache: + if len(cache) > 20: + del cache[order.pop(0)] + cache[args] = func(*args) + else: + order.remove(args) + order.append(args) + return cache[args] + + return f + class propertycache(object): def __init__(self, func): self.func = func