Using Cache Versus Application
It might appear that there are close likenesses between the Cache and HttpApplicationState classes. Both have the capability to store data in an application-wide context, and the syntax for dealing with them is basically identical. The differences, however, are great.
Both the Cache and HttpApplicationState classes provide a mechanism for storing application-wide data and can be used for managing state because of this. This is where the likenesses end.
The Cache class takes management of this data further than that of the HttpApplicationClass.
First, accessing data in the Cache class is fully thread-safe. This is unlike the HttpApplicationState class, which requires you to surround data access with synchronization methods Lock() and UnLock().
Second, the Cache class, based on a prioritization scheme, can free data from the Cache when it has not been used in order to free up memory when resources are low.
Also, you get more control over the items added to the Cache by setting absolute and sliding expiration policies.
Last, you can associate items with the Cache to other cached items or to a file, which will result in the cached items being removed from the Cache.
The HttpApplicationState class serves well as a general state store for information needing to be available application-wide and needing to exist during the life of the application.
The Cache class is better suited for complex state management in which greater control over the cached data is required.
ref:http://conferences.embarcadero.com/article/32217