【发布时间】:2012-09-14 15:55:55
【问题描述】:
我有一个程序集,可以计算一个复杂的数学值。此程序集由 ASP.NET 应用程序使用(但没有对 System.Web 的引用,因此无法访问 Web 缓存等)。
我希望为进入网络应用程序的所有请求缓存复杂计算的结果。
我是否认为我的数学课中的静态字段将在每个 AppDomain 初始化一次并且 AppDomain 将服务多个请求,每个请求都将从静态字段读取?
例如:
public static class MyMath
{
private static ConcurrentDictionary<int, decimal> results = new ConcurrentDictionary<int, decimal>();
public static decimal ComputeValue(int input)
{
decimal result;
if (!results.TryGetValue(int, out result))
{
result = ComputeComplicatedValue(int);
results.TryAdd(input, result);
}
return result;
}
}
该示例是否为我提供了多个不相关请求的线程安全缓存结果?
谢谢
【问题讨论】:
-
为了避免为单个 int 计算两次值,请考虑 GetOrAdd 而不是 TryGet 和 TryAdd。
-
Malcom,我正在用缓存做类似的事情。你最终做了什么来解决你的问题?
标签: c# asp.net caching concurrency memoization