views:

46

answers:

2

Hi,

I'm trying to cache user controls and on some pages i want to cache single objects. There are multiple ways of implementing caching, and my head is breaking over it.

The way I see the caching options now:

You have the PartialCaching option which is set to cache the control for 30 minutes, and after that it clears itself... You have the varyByParam to identity the page by its querystring paramaters... or other vary options

But i just cant find an appropriate way to add caching to a control, and be able to clear the caching programmatically when i update one of the objects used in the control from the backend.

You can do HttpContext.Current.Cache.Insert(), which accepts a key on which you can destroy the caching item later by using remove... This can save objects in cache but can you use options like varyByParam?

My questions are burnt down to two:

  1. Is there a way to clear the caching on specific user controls from the code? If yes, can this be done according to the varyby options?
  2. How would the object caching respond to logged in users or anonymous users using Insert()?

EDIT: I'm caching multiple things.... And I'm really flabbergasted in which choice to make referring to caching. Can the Cache.Insert be varied by Parameters?

The main problem is peopling editing things from the backend, which needs to trigger an event that reinstantiates or clears all caching items referring that object.

+1  A: 

You can remove items from the output cache using the following.

HttpResponse.RemoveOutputCacheItem("/caching/CacheForever.aspx");

Now, this is only going to get you part of what you are looking for. This will remove ALL cache entries for that specific page. The MSDN documentation confirms the behavior.

As to your other question Cache.Insert() is a single cache store across the application, user identity is not considered.

Now I would also take a bigger look at what you are doing, it might make sense to only cache the actual data and then you can add/remove the specific items. However, if your .control really does take a lot of CPU etc to handle the display then the output cache idea works.

Mitchel Sellers
+1  A: 

Using the System.Web.Caching.Cache class you can cache items and create dependencies for the items in the cache. If you're using a SQL server, then you can use the SqlCacheDependency class to clear items from your cache based on your database.

Otherwise you can create your own derivatives of the CacheDependency class which you can use to accomplish the same thing. I found this post that describes doing that.

Coding Gorilla