我正在对一个被调用数亿次的函数实现缓存。缓存大小为数千万个项目。目前它是使用 a 实现的Dictionary,并且其中的查找需要花费大量时间。
是否可以获取对整个对的引用Dictionary,而不仅仅是值,这样我就可以检查一个值是否存在,如果它确实使用单个查找,则检查它(并且可能更新它)?
目前,我有这样的事情:
int val;
if (cache.TryGetValue(key, out val))
if (val < newVal) cache[key] = newVal;
else return val;
else
cache.Add(key, newVal);
Run Code Online (Sandbox Code Playgroud)
我想得到这个:
Pair pair = cache.GetPair(key);
if (pair != null)
if (pair.Value < newVal) pair.Value = newVal;
else return pair.Value;
else
cache.Add(key, newVal);
Run Code Online (Sandbox Code Playgroud)
如果有一种替代的数据结构允许这样做,我也很高兴听到它。
提前致谢!
这是受到无限海回答的启发。假设您的cache变量现在是 aDictionary<string, int>您可以将其更改为Dictionary<string, MutableInt32>where MutableInt32,如下所示:
// wraps an int that may change
class MutableInt32
{
public int Value;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以将你的代码更改为
MutableInt32 val;
if (cache.TryGetValue(key, out val))
if (val.Value < newVal) val.Value = newVal;
else ...
Run Code Online (Sandbox Code Playgroud)