views:

67

answers:

1

I'm using the SqlProfileProvider on one of my websites and in one page I need to fetch the whole list of profiles (it is an intranet).

The method that I use is the ProfileManager.GetAllProfiles(). The problem is that its performance is really bad and it slows down the website considerably.

Therefore, I was thinking of caching the result of the method call in the Application scope as a DataTable (so I could filter/search on it as well).

My problem is that I have several servers running this webapp, and I would like the cache to be in sync. I started using memcached but I was put off by some problems (hence going back to thinking in caching in the Application scope).

So, here are my questions:

  • Would it be efficient to store the DataTable containing the profiles in the Application object? Or, is it possible to store objects in the Cache and have them available for all clients/browsers?
  • Is it possible to add a (SQL) Cache Depedency to this cache?
+1  A: 

You could cache portions of the web page which will depend on the list of profiles by putting them in a user control and marking it as cacheable. SqlCacheDependency cache policy expiration could be defined as well. As for the cache location, every web server in the farm will have it's own version in memory but using cache expiration will make sure that this version is not out of sync with the data in the DB.

Page or fragment caching is the most effective caching technique because contrary to caching your model (a DataTable or whatever) you don't pay the price of HTML rendering.

Darin Dimitrov
Perhaps I wasn't clear enough. Since the datatable contents will use a lot of memory, I need to cache it per application not per session. Can I still use the cache object?
pablo
Page or fragment caching is per application and not per session.
Darin Dimitrov