3.31. Creating an Object Cache

Problem

Your application creates many objects that are expensive to create and/or have a large memory footprint—for instance, objects that are populated with data from a database or a web service upon their creation. These objects are used throughout a large portion of the application’s lifetime. You need a way to not only enhance the performance of these objects—and as a result, your application—but also to use memory more efficiently.

Solution

Create an object cache to keep these objects in memory as long as possible, without tying up valuable heap space and possibly resources. Since cached objects may be reused at a later time, you also forego the process of having to create similar objects many times.

You can reuse the ASP.NET cache that is located in the System.Web.Caching namespace or you can build your own lightweight caching mechanism. The See Also section at the end of this recipe provides several Microsoft resources that show you how to use the ASP.NET cache to cache your own objects. However, the ASP.NET cache is very complex and may have a nontrivial overhead associated with it, so using a lightweight caching mechanism like the one shown here is a viable alternative.

The following class, ObjCache, represents a type that allows the caching of SomeComplexObj objects:

using System; using System.Collections; public class ObjCache { // Constructors public ObjCache( ) { Cache = new Hashtable( ); } public ObjCache(int initialCapacity) { Cache = ...

Get C# Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.