Hundreds of pages using the same controls can also share the cached entries for those controls, rather than keeping separate cached versions for each page.
This functionality is built into the caching module, and will insert separate cached versions of the page for each browser name and major version.
Often, caching an entire page is not feasible, because certain parts of the page are customized for the user.
To implement page output caching, simply add an Output Cache directive to the page. The names of the variables in the Request, which should result in, separate cache entries. "*" can be used to create new cache entries for every different set of variables. Most situations can be handled with a combination of the required Duration and Vary By Param options.
For instance, if you have a product catalog that allows the user to view pages of the catalog based on a category ID and a page variable, you could cache it for some period of time (an hour would probably be acceptable unless the products change all the time, so a duration of 3600 seconds) with a Vary By Param of "category ID;page".
Memory is cheap—by implementing caching in an intelligent fashion throughout the application, you can achieve great performance gains.
Caching can be a good way to get "good enough" performance without requiring a lot of time and analysis.
Again, memory is cheap, so if you can get the performance you need by caching the output for 30 seconds instead of spending a day or a week trying to optimize your code or database, do the caching solution (assuming 30-second old data is ok) and move on.
Caching is one of those things where 20% of the work provides 80% of the benefit, so it should be one of the first things you try to improve performance.
The cache API provides additional flexibility (quite a lot, in fact), and can be used to take advantage of caching throughout every layer of an application. Steve's Caching Tips Page Level Output Caching Fragment Caching, User Control Output Caching Caching API, Using the Cache Object Summary Of the many features available in ASP.
Output caching and fragment caching have the advantage of being incredibly simple to implement, and are sufficient in many cases.
It has the greatest potential impact on an application's performance, out of all the other features in ASP. NET developers to accept the additional overhead of building sites using rather heavy controls like Data Grids without fear that performance will suffer too much.