У меня есть READONLY объектный граф, который кэшируется на одну минуту, чтобы его могли использовать все потоки (код ниже).
public class ObjectGraphCache
{
static readonly Object storeLock = new object();
public ObjectGraph AllForElection(int ElectionId, System.Web.Caching.Cache cache)
{
string key=string.Format("AllForElection{0}",
ElectionId);
int timout = int.Parse(ConfigurationManager.AppSettings["dbCacheTimeInSeconds"]);
if (timout == 0)
{
ObjectGraph graph = new ObjectGraph();
graph.AllForElection(ElectionId);
return graph;
}
else
{
Object obj = cache[key];
if (obj == null)
{
lock (storeLock)
{
obj = cache[key]; // In case another page got the lock first and your are queued (Ensures only one get per cycle)
if (obj == null)
{
// Not in cache
ObjectGraph graph = new ObjectGraph();
graph.AllForElection(ElectionId);
cache.Insert(
key,
graph,
null,
DateTime.Now.Add(new TimeSpan(0, 0, timout)),
System.Web.Caching.Cache.NoSlidingExpiration);
return graph;
}
}
}
return (ObjectGraph)obj;
}
Однако я хочу знать: зачем использовать объект Cache, когда мне легче хранить объект READONLY в качестве статического.В нем хранится указатель на кучу, поэтому при его обновлении потоки, все еще обрабатывающие предыдущий объект указателей, будут переносить один штраф со старым объектом, а также мне не придется приводить объект из кэша перед его возвратом.Кто-нибудь видел какие-нибудь ошибки?