ASP.NET Cache bit me today
2008-03-26 @ 18:09#
ok, simple question. read the code example below. note the use of ASP.NET's Cache object, note the use of the disk file and the CacheDependency set up there. finally, note that the object stored to cache is a string array. now...
run the code in your head and answer the following questions:
at the end of the run:
- what are the values in memory?
- what are the values on disk?
- why?
dang-it!
using System;
using System.IO;
using System.Web;
using System.Web.Caching;
public class cacheTest : IHttpHandler
{
public void ProcessRequest(Httpctx ctx)
{
string key = ctx.Server.MapPath("~/cachetest/cachetest.txt");
string data = "item1,item2";
string[] results = null;
// check memory
results = (string[])ctx.Cache.Get(key);
if (results == null)
{
// check disk
if(key.Exists(key))
{
// read it
using(StreamReader sr = new StreamReader(key))
{
data = sr.ReadToEnd();
sr.Close();
}
}
else
{
// ok, then write it
using(StreamWriter sw = new StreamWriter(key))
{
sw.Write(data);
sw.Close();
}
}
// create array
results = data.Split(',');
// store to memory
ctx.Cache.Add(
key,
results,
new CacheDependency(key),
Cache.NoAbsoluteExpiration,
Cache.NoSlidingExpiration,
CacheItemPriority.Normal,
null);
}
// modify array
results[0] = "itemA";
// show results
ctx.Response.ContentType = "text/plain";
ctx.Response.Write("results: " + results[0] + ", " + results[1]);
// questions:
// what is in memory now?
// what is on disk now?
// explain your answer
}
public bool IsReusable
{
get
{
return false;
}
}
}