在将此标记为重复之前,请仔细检查。
我在词典中积累了一些统计数据。
Dictionary<string, int> stats;
当事件发生时,我更新stats
:
if (!stats.ContainsKey(eventName))
stats.Add(eventName, eventValue);
else
stats[eventName] = stats[eventName] + eventValue;
问题是这段代码会对第一次出现的事件进行2次查找,否则会进行3次查找。第一次出现并不是什么大问题。但是这3次更新的查找真的很糟糕。我怎么能改善这个?
答案 0 :(得分:4)
您可以在检查包含时获取值。事实上,在这种情况下,你可以使它无条件:
int value;
stats.TryGetValue(eventName, out value);
stats[eventName] = value + eventValue;
如果value
没有条目,则使用eventName
为0的事实。如果你愿意,你可以明确地说明:
int value;
if (!stats.TryGetValue(eventName, out value))
{
stats.Add(eventName, eventValue);
}
else
{
stats[eventName] = value + eventValue;
}
无论哪种方式,现在你只需要一次获取和一次设置。
或者,您可以使用ConcurrentDictionary
及其AddOrUpdate
方法。