This article is intent to show you how to use Page.Cache class of System.Web.Caching.Cache with partial caching.
1. Partial Caching with no Dependency and Sliding Expiration with time
Partial caching means you are not going to cache the complete page only the part of page say userControl or some other control like Grid with large amount of data.
For eg: you have Grid to Bind with Dataset. So every time the page get refreshed or Grid get rebind to the data the data will come from database server every time. To prevent this round trip we can cache the DataSet.
Use the Cache object to insert the DataSet object into memory. Here is the Cache.Insert() static method explained with its options used. Here we use Time expiration with sliding expiration.
Cache.Insert(
/*name
of cache object*/"key",
/*Item
to be saved in Cache*/ds,
/*Dependency
*/null,
/*Expiration
Behavior*/
System.Web.Caching.Cache.NoAbsoluteExpiration,
/*Time span
to expire the cache*/
new
System.TimeSpan(0,0,30)
);
Retrieve the Cache object When a request come for DataSet.
DataSet ds
= (DataSet)Cache["key"];
// Check if Dataset was saved into Cache
Now check if
(ds == null) then perform your query to DataBase fetch the refresh data and add it to cache again.
Here is the complete code for Caching a DataSet into database.
protected void Page_Load(object sender, EventArgs
e)
{
DataSet
ds = null;
//Retrieve
the dataset using key from Cache.
ds = (DataSet)Cache["key"];
// Check if
Dataset was saved into Cache
if
(ds == null)
{
SqlConnection
cn = new SqlConnection(@"Data Source=NODE007\SQLSERVER2005;Initial
Catalog=MenuDb;Integrated Security=True");
cn.Open();
SqlCommand
cmd = new SqlCommand("select Text from Menu", cn);
SqlDataAdapter adp = new SqlDataAdapter("select Text from Menu", cn);
ds = new
DataSet();
adp.Fill(ds);
//Insert
the fresh dataset into cache
Cache.Insert("key",ds,null,System.Web.Caching.Cache.NoAbsoluteExpiration,new System.TimeSpan(0,0,30));
}
GridView1.DataSource = ds;
GridView1.DataBind();
}
2. Partial Caching with SqlCacheDependency object used with Cache Class
Before using SqlCacheDependency object you have to configure the SqlDependency in your web.config.
Here is how to configure SqlDependency in your web.config
//Insert the DataSet with SqlDependency object
System.Web.Caching.SqlCacheDependency SD = new
System.Web.Caching.SqlCacheDependency("_defaultCon","ProductCategories");
Cache.Insert("key", ds, SD);
You can check your performance of page by Turning on the Trace.
Cheers