Library tutorials & articles
.NET Data Caching
Using Data Caching
The .NET data caching API is comprised of the two classes in the System.Web.Caching namespace. The first class, Cache , is the class we'll be using to add and remove items from the data cache. The second class, CacheDependency , is used when assigning a cache dependency to an item in the data cache (we'll be discussing this in due time).
To add an item to the cache you can simply do:
' In VB.NET
Cache("key") = value
// In C#
Cache["key"] = value;
Note that the C# version uses brackets instead of parenthesis when referencing the items of the cache in the above manner. In the remainder of the examples in this article I will be using VB.NET syntax, but will point out any major differences between the VB.NET and C# syntax.
The above code adds the item value to the data cache with the key key . The key is used to reference the item at some later point. That is, in another ASP.NET Web page we can extract the value inserted above by using:
value = Cache("key")
- or -
value = Cache.Get("key"
To explicitly remove an item from the data cache you can use the Remove method, specifying the key of the cache item you want removed:
Cache.Remove("key")
Now that we've examined the simple form for adding, removing, and selecting an item from the data cache, let's take a more in-depth look at adding items to the cache. In the next section we'll examine the Cache.Insert method in detail, which can be used to enter cache items with cache dependencies, absolute and sliding time expirations, eviction priority, and callback delegates.
Related articles
Related discussion
-
Profile Class does not work after Translation
by converter2009 (1 replies)
-
what is the SQL Server Provider
by hayperaktib (1 replies)
-
Very Urgent regarding deleting the images from a folder
by Nanosteps (6 replies)
-
Java Script, File uploading on ftp server using java script code
by h_c_a_andersen (2 replies)
-
sharepoint calendar web part with events from sql table
by converter2009 (2 replies)
Related podcasts
-
StackOverflow uses ASP.NET MVC - Jeff Atwood and his technical team
Scott chats with Jeff Atwood of CodingHorror.com and most recently, StackOverflow.com. Jeff and Joel Spolsky and their technical team have created a new class of application using ASP.NET MVC. What works, what doesn't, and how did it all go down?
Events coming up
-
Mar
15
DevWeek 2010
London, United Kingdom
DevWeek is Europe’s leading independent conference for software developers, database professionals and IT architects, and features expert speakers on a wide range of topics, including .NET 4.0, Silverlight 3, WCF 4, Visual Studio 2010, REST, Windows Workflow 4, Thread Synchronization, ASP.NET 4.0, SQL Server 2008 R2, LINQ, Unit Testing, CLR & C# 4.0, .NET Patterns, WPF 4, F#, Windows Azure, ADO.NET, Entity Framework, Debugging, T-SQL Tips & Tricks, and more.
To Access the Pages Cache from class code c#
Cache ce = new Cache();
ce = System.Web.HttpRuntime.Cache; Lol
So , Does That mean this is a Genuine Microsoft Bug??
ystem.Web.UI.Page {
No matter What If I Use this Syntax[ Colorede red] to acess the Cache Object I get an Exception...
internal class EnvUtil
internal EnvUtil()
{
}
internal string ResetClientID
{
get
{
string sResetClientId="";
try
{
if (Cache["ResetClientDoc"] == null) {
TextReader xt=new StreamReader(Server.MapPath(@"../../Content/EnvReport/ResetClientID.xml"));
sResetClientId=xt.ReadToEnd();
xt.Close();
CacheDependency dep = new CacheDependency(Server.MapPath(@"../../Content/EnvReport/ResetClientID.xml"), DateTime.Now);
Cache.Insert("ResetClientDoc", sResetClientId, dep);
}
else
{
sResetClientId=(string) Cache["ResetClientDoc"];
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
return sResetClientId;
}
}
}
}
Output
?ex.Message
"Cache is not available"
Just because the Cache cannot be inherited, doesn't mean you can't access it when you are inheriting the Page class -
public class MyClass : System.Web.UI.Page {
public Object SomeMethod() {
return Cache["SomeObject"];
}
}
is fine. As it's sealed, what you can't do is this:
public class MyClass : Cache {
// override or add some methods here
}
I stumbled into this problem. The comment is correct The Cache class is a sealed class, which means it cannot be inherited. Since you are inheriting the Page class in your X testClass the Cache object will not be available. One way to solve the problem is to pass the Cache object of the Page to the Method that need to process the Cache information as shown in the Sample code..
<%@ import Namespace="Env" %>
<%@ import Namespace="System.Xml" %>
<%@ Page Language="C#" Inherits ="Env.ServerProcess" %>
<%
XmlDocument xDoc = new XmlDocument();
xDoc=ProcessRequest(Request.InputStream,this.Cache);
Response.ContentType="text/xml";
Response.Write (xDoc.OuterXml);
%>
public class ServerProcess : System.Web.UI.Page
{
public XmlDocument ProcessRequest(Stream PageRequestStream,Cache MyCache)
{
string sResetClientId="";
XmlDocument xdoc =new XmlDocument();
try{
if (MyCache ["ResetClientDoc"] == null){
TextReader xt=new StreamReader(Server.MapPath(@"Content/ResetClientID.xml"));
sResetClientId=xt.ReadToEnd();
xt.Close();
MyCache dep = new CacheDependency(Server.MapPath(@"Content/ResetClientID.xml"), DateTime.Now);
MyCache.Insert("ResetClientDoc", sResetClientId, dep);}
Else
{
sResetClientId=(string) MyCache ["ResetClientDoc"];
}
}
catch (Exception e){
System.Diagnostics.Debug.WriteLine( e.Message.ToString())
}
xdoc.LoadXml(sResetClientId);
return xdoc;
}
Hi Charlie,
You can use .NET remoting when you need to keep your cache across processes. The process is discussed here Using Remoting Singleton Caching.
Hope this helps.
-DM
As for caching across processes, you'll need to use .NET remoting. The process is discussed here The process is discussed here Using Remoting Singleton Caching.
Hope this helps.
-DM
Yes I have tried that as well. IMHO: The thing is that you are trying to access a cache object from a class. But the documentation says that the Cache object cannot be inherited. therefore I would expect it to throw a "Cache is not available" exception. Now this is a real bugger specially when you want to cache data across process/pages. This is precisely what I'm trying to do right now and I have yet to find a solution. Help anyone?
How would one use the .NET cache object to keep caches accurate across processes?
--Charlie
On what line does the error occur?
// test.cs
//
namespace xtest {
using System;
using System.Web;
using System.Web.Caching;
public class xtest {
public static Cache srvCache = new Cache();
public xtest() {}
public static string getCache(string key){
try {
object strServer= 0;
if (srvCache["ServerString"] == null)
srvCache["ServerString"]=key;
strServer = srvCache.Get("ServerString");
return (string) strServer;
}
catch (Exception e)
{
return "error: getCache() - "+ e.Message;
}
}
}
}
When I run the below mentioned aspx. I get error:
- Object reference not set to an instance of an object.
<%@ Page Language="C#" %>
<%@ import Namespace="xtest" %>
<script runat="server">
void Page_Load(object sender, EventArgs e) {
Response.Write(xtest.getCache("X-STAGE"));
}
</script>
<html>
<head>
</head>
<body>
<form runat="server">
<!-- Insert content here -->
</form>
</body>
</html>
This thread is for discussions of .NET Data Caching.