Cache files using ASP.NET Cache Dependency

Posted by: Malcolm Sheridan , on 6/12/2009, in Category ASP.NET
Views: 46029
Abstract: The following article demonstrates how to use ASP.NET cache dependency with files.
Cache files using ASP.NET Cache Dependency
 
When it comes to getting the most performance out of your ASP.NET application, caching is one avenue to look into. Earlier this year I demonstrated how to use SQL Cache Dependency using SQL Server 2005 and 2008, but this time I’ll demonstrate how to cache files using ASP.NET Cache Dependency.
Caching files or directories for changes is made possible thanks to the System.Web.Caching.CacheDependency class. This class can monitor a single file and folder or an array of files and folders for changes. In this example I am using a single file in the webs ites root directory to monitor.
Open Visual Studio 2008 and create a new ASP.NET Web Application. Add a new text file to the root directory and call it SampleFile.txt. Open the text file and add the following text:
 
Donec fermentum condimentum nisi. Proin iaculis mauris id lorem viverra molestie. Duis vel orci. Et pulvinar pede ligula a sapien. Donec fermentum condimentum nisi. Proin iaculis mauris id lorem viverra molestie. Duis vel orci. Nam consequat. Morbi nec lacus
 
This is just some placeholder text. Next add a TextBox to the Default.aspx page and set the TextMode to MultiLine:
 
<asp:TextBox ID="TextBox1" runat="server" Width="312px" Height="188px"
            TextMode="MultiLine"></asp:TextBox>
 
In the page load event lets add the code that monitors the file for changes:
 
C#
 
protected void Page_Load(object sender, EventArgs e)
{           
    string fileContent = Cache["SampleFile"] as string;
    if (string.IsNullOrEmpty(fileContent))
    {
        using (StreamReader sr = File.OpenText(Server.MapPath("~/SampleFile.txt")))
       {
           fileContent = sr.ReadToEnd();
           Cache.Insert("SampleFile", fileContent, new System.Web.Caching.CacheDependency(Server.MapPath("~/SampleFile.txt")));
       }
    }   
    TextBox1.Text = fileContent;
}
 
VB.NET
 
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
      Dim fileContent As String = TryCast(Cache("SampleFile"), String)
      If String.IsNullOrEmpty(fileContent) Then
            Using sr As StreamReader = File.OpenText(Server.MapPath("~/SampleFile.txt"))
               fileContent = sr.ReadToEnd()
               Cache.Insert("SampleFile", fileContent, New System.Web.Caching.CacheDependency(Server.MapPath("~/SampleFile.txt")))
            End Using
      End If
      TextBox1.Text = fileContent
End Sub
 
As you can see in the example, the application checks the cache for an item in the cache named SampleFile and assigns the value to the fileContent variable. When you’re checking for values in the cache, it is important to create a reference to the cached object. This is important because the data in the cache can be removed at any time by the web server. Assigning it to a variable eliminates this problem. 
 
If the cache is null, the file is opened and added to the cache by the Cache.Insert method. The code shows an item named SampleFile added to the cache and having a file dependency set on the file named SampleFile.xml file. If you reload the page, the contents are read from the cache. If you update the contents of the SampleFile.txt file and reload the page, you’ll see that the object has been removed from the cache.
This is yet another way of using the cache to make your ASP.NET application perform that little better. The entire source code of this article can be downloaded from here
Give a +1 to this article if you think it was well written. Thanks!
Recommended Articles
Malcolm Sheridan is a Microsoft awarded MVP in ASP.NET, a Telerik Insider and a regular presenter at conferences and user groups throughout Australia and New Zealand. Being an ASP.NET guy, his focus is on web technologies and has been for the past 10 years. He loves working with ASP.NET MVC these days and also loves getting his hands dirty with jQuery and JavaScript. He also writes technical articles on ASP.NET for SitePoint and other various websites. Follow him on twitter @malcolmsheridan


Page copy protected against web site content infringement by Copyscape


User Feedback
Comment posted by Kevin Clark on Sunday, July 19, 2009 9:48 AM
Hi, wonderfull article, however i should point out that asp.net cache has its limitations when it comes to <a href="http://www.alachisoft.com">distributed caching</a>. if you want to know more read <a href="http://www.alachisoft.com/ncache/asp-net-cache.html">here</a>.
Comment posted by Malcolm Sheridan on Saturday, August 8, 2009 5:26 AM
@Kevin
Yes you're quite right.  When you get two or more web servers you need to update your caching strategy.
Comment posted by Benny Blanco from the Bronx on Tuesday, October 29, 2013 9:24 AM
Excellent article...just need to clarify at the end that "the object has been removed from the cache" means if you change the SampleFile.txt the new contents of the file will be displayed in the textbox and next time from the cache until you change again the Samplefile.txt

Post your comment
Name:  
E-mail: (Will not be displayed)
Comment:
Insert Cancel