我们的生产服务器上也遇到了很高的CPU峰值。
经过研究,我发现我们的解决方案中有一些静态词典。
其中一个看起来像这样:
public static Dictionary<string, List<ID>> OrderNrLookupTable
{
get
{
const string cacheKey = "ProductRepository_OrderNrHashTable1";
var results = CacheManager.GetFromCache<Dictionary<string, List<ID>>>(cacheKey);
if (results == null)
{
results = new Dictionary<string, List<ID>>();
foreach (var orderNrItem in GetAllOrderNrs())
{
var product = orderNrItem.InnerItem.Parent;
if (product != null && product.IsProduct())
{
if (!results.ContainsKey(orderNrItem.OrderNumber))
{
results.Add(orderNrItem.OrderNumber, new List<ID> {product.ID});
}
else
{
results[orderNrItem.OrderNumber].Add(product.ID);
}
}
}
CacheManager.SaveToCache(results, cacheKey);
}
return results;
}
}
我的问题是;这个线程安全吗?这会导致生产服务器上的高CPU峰值吗?
更新 线程没有修改字典。