1. Trang chủ
  2. » Công Nghệ Thông Tin

ASP.NET 4 Unleased - p 137 potx

10 140 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 688,88 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

CHAPTER 29 Caching Application Pages and Data Page Output Caching enables you to cache the entire rendered contents of a page in memory everything that you see when you select View Sourc

Trang 1

This page intentionally left blank

Trang 2

Caching Application

Pages and Data

Overview of Caching

Using Page Output Caching

Using Partial Page Caching

Using DataSource Caching

Using Data Caching

Using SQL Cache Dependencies

Summary

The slowest operation that you can perform in an

ASP.NET page is database access Opening a database

connection and retrieving data is a slow operation The best

way to improve the performance of your data access code is

not to access the database at all

By taking advantage of caching, you can cache your

data-base records in memory Retrieving data from a datadata-base is

slow Retrieving data from the cache, on the other hand, is

lightning fast

In this chapter, you learn about the different caching

mech-anisms supported by ASP.NET Framework, which provides

you with an overwhelming number of caching options We

attempt to clarify all these caching options over the course

of this chapter

In the final section of this chapter, you learn how to use

SQL Cache Dependencies, which enable you to reload

cached data automatically when data changes in a database

table You learn how to use both polling and push SQL

Cache Dependencies

Overview of Caching

The ASP.NET 4 Framework supports the following types of

caching:

Page Output Caching

Partial Page Caching

DataSource Caching

Trang 3

CHAPTER 29 Caching Application Pages and Data

Page Output Caching enables you to cache the entire rendered contents of a page in

memory (everything that you see when you select View Source in your web browser) The

next time that any user requests the same page, the page is retrieved from the cache

Page Output Caching caches an entire page In some situations, this might create

prob-lems For example, if you want to display different banner advertisements randomly in a

page, and you cache the entire page, the same banner advertisement displays with each

page request

NOTE

The AdRotator control included in ASP.NET Framework takes advantage of a feature

called post-cache substitution to randomly display different advertisements even when

a page is cached Post-cache substitution is described later in this chapter

Partial Page Caching enables you to get around this problem by enabling you to cache

only particular regions of a page By taking advantage of Partial Page Caching, you can

apply different caching policies to different areas of a page

You use DataSource Caching with the different ASP.NET DataSource controls such as the

SqlDataSource and ObjectDataSource controls When you enable caching with a

DataSource control, the DataSource control caches the data that it represents

Finally, Data Caching is the fundamental caching mechanism Behind the scenes, all the

other types of caching use Data Caching You can use Data Caching to cache arbitrary

objects in memory For example, you can use Data Caching to cache a DataSet across

multiple pages in a web application

In the following sections, you learn how to use each of these different types of caching in

detail

NOTE

Caching LINQ to SQL queries raises special issues, which are addressed in Chapter

20, “Data Access with LINQ to SQL.”

NOTE

When configuring and debugging caching, having a tool that enables you to monitor the

HTTP traffic between web server and browser is extremely helpful You can download

the free Fiddler tool, which enables you to view the raw request and response HTTP

traffic, from http://www.FiddlerTool.com

Trang 4

Using Page Output Caching

You enable Page Output Caching by adding an <%@ OutputCache %> directive to a page

For example, the page in Listing 29.1 caches its contents for 15 seconds

<%@ Page Language=”C#” %>

<%@ OutputCache Duration=”15” VaryByParam=”none” %>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”

“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

<script runat=”server”>

void Page_Load()

{

lblTime.Text = DateTime.Now.ToString(“T”);

}

</script>

<html xmlns=”http://www.w3.org/1999/xhtml” >

<head id=”Head1” runat=”server”>

<title>Cache Page Output</title>

</head>

<body>

<form id=”form1” runat=”server”>

<div>

<asp:Label

id=”lblTime”

Runat=”server” />

</div>

</form>

</body>

</html>

The page in Listing 29.1 displays the current server time in a Label control The page also

includes an <%@ OutputCache %> directive If you refresh the page multiple times, you

notice that the time is not updated until at least 15 seconds have passed

Trang 5

CHAPTER 29 Caching Application Pages and Data

When you cache a page, the contents of the page are not regenerated each time you

request the page The NET class that corresponds to the page is not executed with each

page request The rendered contents of the page are cached for every user that requests the

page The page is cached in multiple locations By default, the page is cached on the

browser, any proxy servers, and on the web server

In Listing 29.1, the page is cached for 15 seconds You can assign a much larger number to

the duration attribute For example, if you assign the value 86400 to the duration

parame-ter, the page is cached for a day

NOTE

There is no guarantee that a page will be cached for the amount of time that you

specify When server memory resources become low, items are automatically evicted

from the cache

Varying the Output Cache by Parameter

Imagine that you need to create a separate master and details page The master page

displays a list of movies When you click a movie title, the details page displays detailed

information on the movie selected

When you create a master/details page, you typically pass a query string parameter

between the master and details page to indicate the particular movie to display in the

details page If you cache the output of the details page, however, everyone will see the

first movie selected

You can get around this problem by using the VaryByParam attribute The VaryByParam

attribute causes a new instance of a page to be cached when a different parameter is passed

to the page (The parameter can be either a query string parameter or a form parameter.)

For example, the page in Listing 29.2 contains a master page that displays a list of movie

titles as links

<%@ Page Language=”C#” %>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”

“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

<html xmlns=”http://www.w3.org/1999/xhtml” >

<head id=”Head1” runat=”server”>

<title>Master</title>

</head>

<body>

Trang 6

<form id=”form1” runat=”server”>

<div>

<asp:GridView

id=”grdMovies”

DataSourceID=”srcMovies”

AutoGenerateColumns=”false”

ShowHeader=”false”

GridLines=”none”

Runat=”server”>

<Columns>

<asp:HyperLinkField

DataTextField=”Title”

DataNavigateUrlFields=”Id”

DataNavigateUrlFormatString=”~/Details.aspx?id={0}” />

</Columns>

</asp:GridView>

<asp:SqlDataSource

id=”srcMovies”

ConnectionString=”<%$ ConnectionStrings:Movies %>”

SelectCommand=”SELECT Id,Title FROM Movies”

Runat=”server” />

</div>

</form>

</body>

</html>

If you hover your mouse over the links displayed in Listing 29.2, you can see the query

string parameter passed by each link in the browser status bar (see Figure 29.1) For

example, the first movie link includes a query string parameter with the value 1, the

second link includes a query string parameter with the value 2, and so on When you click

a movie link, this query string parameter is passed to the details page in Listing 29.3 29

Trang 7

CHAPTER 29 Caching Application Pages and Data

<%@ Page Language=”C#” %>

<%@ OutputCache Duration=”3600” VaryByParam=”id” %>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”

“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

<html xmlns=”http://www.w3.org/1999/xhtml” >

<head id=”Head1” runat=”server”>

<title>Details</title>

</head>

<body>

<form id=”form1” runat=”server”>

<div>

<%= DateTime.Now.ToString(“T”) %>

<hr />

<asp:DetailsView

id=”dtlMovie”

DataSourceID=”srcMovies”

Runat=”server” />

Trang 8

<asp:SqlDataSource

id=”srcMovies”

ConnectionString=”<%$ ConnectionStrings:Movies %>”

SelectCommand=”SELECT * FROM Movies

WHERE Id=@Id”

Runat=”server”>

<SelectParameters>

<asp:QueryStringParameter

Name=”Id”

Type=”int32”

QueryStringField=”Id” />

</SelectParameters>

</asp:SqlDataSource>

</div>

</form>

</body>

</html>

The page in Listing 29.3 uses a DetailsView to display detailed information on the movie

selected from the master page (see Figure 29.2) The DetailsView is bound to a

SqlDataSource control that includes a QueryStringParameter SELECT parameter that

represents the id query string parameter

Trang 9

CHAPTER 29 Caching Application Pages and Data

The Details.aspx page includes an <%@ OutputCache %> directive The VaryByParam

attribute in the <%@ OutputCache %> directive has the value id If you request the

Details.aspx page with a different value for the id query string parameter, a different

cached version of the page is created

It is important to understand that using VaryByParam results in more caching and not less

caching Each time a different id parameter is passed to the Details.aspx page, another

version of the same page is cached in memory

The Details.aspx page displays the current time The time does not change when you

request the Details.aspx page with the same query string parameter

You can assign two special values to the VaryByParam attribute:

none—Causes any query string or form parameters to be ignored Only one version

of the page is cached

*—Causes a new cached version of the page to be created whenever there is a

change in any query string or form parameter passed to the page

You also can assign a semicolon-delimited list of parameters to the VaryByParam attribute

when you want to create different cached versions of a page, depending on the values of

more than one parameter

Varying the Output Cache by Control

The VaryByControl attribute enables you to generate different cached versions of a page

depending on the value of a particular control in the page This attribute is useful when

you need to create a single-page Master/Details form

For example, the page in Listing 29.4 contains both a DropDownList and GridView control

When you select a new movie category from the DropDownList, a list of matching movies

displays in the GridView (see Figure 29.3)

Trang 10

<%@ Page Language=”C#” %>

<%@ OutputCache Duration=”3600” VaryByControl=”dropCategories” %>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”

“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

<html xmlns=”http://www.w3.org/1999/xhtml” >

<head id=”Head1” runat=”server”>

<title>Master/Details</title>

</head>

<body>

<form id=”form1” runat=”server”>

<div>

<%= DateTime.Now.ToString(“T”) %>

<hr />

<asp:DropDownList

id=”dropCategories”

DataSourceID=”srcCategories”

Ngày đăng: 06/07/2014, 18:20

TỪ KHÓA LIÊN QUAN