我们在一个高流量的网站上,我们想要使用ConcurrentDictionary进行一些非常简单的缓存计算,以防止它为每个请求完成.可能的输入数量足够有限,计算相对较重(拆分和重新连接字符串).
我正在考虑代码
string result;
if (!MyConCurrentDictionary.TryGetValue(someKey, out result))
{
result = DoCalculation(someKey);
// alternative 1: use Item property
MyConcurrentDictionary[someKey] = result;
//alternative 2: use TryAdd
MyConcurrentDictionary.TryAdd(someKey, result);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:从绩效角度来看,哪种替代方案是最佳选择?
你的代码完全坏了; 你假设这两行之间什么都不会改变.
你需要使用.GetOrAdd().
通常,在处理可变并发对象时,必须永远不要对对象进行多次调用,因为它的状态可以随时更改.
| 归档时间: |
|
| 查看次数: |
2487 次 |
| 最近记录: |