27
6 聖殿祭司的 ASP.NET 3.5 專家技術手冊 II 新功能篇 使用 C# 目錄 Chapter 01 VS 2008 IDE 整合開發環境新功能介紹 1-1 ASP.NET 3.5 技術藍圖總覽 ......................................................... 1-2 1-2 ASP.NET 3.5 技術脈絡 ................................................................. 1-7 1-3 VS 2008 開發工具版本介紹.......................................................... 1-9 1-4 VS 2008 VS 2005 環境的共存 ................................................ 1-12 1-5 VS 2008 效能改進 ...................................................................... 1-15 1-6 .NET Framework Multi-Targeting ............................................... 1-21 1-7 HTML 設計畫面的分割檢視....................................................... 1-23 1-8 CSS 樣式建置與管理工具........................................................... 1-24 1-9 JavaScript IntelliSense 支援 ........................................................ 1-25 1-10 JavaScript Debug 除錯支援......................................................... 1-27 1-11 LINQ O/R Mapping 設計工具的支援 ..................................... 1-28 1-12 組合管理 C#using 陳述式 ...................................................... 1-30 1-13 巢狀 Master Pages 的支援........................................................... 1-33 1-14 透明的 IntelliSense 模式 ............................................................. 1-37 1-15 尺規及格線對 WebForm 表單的設計輔助 .................................. 1-38 1-16 VS 2008 重要 Hot-Fix 軟體修正 ................................................. 1-40 1-17 各章範例檔案名稱列表 .............................................................. 1-43 結論 .................................................................................................... 1-44 Chapter 02 C# 3.0 語言新功能介紹 2-1 隱含型別區域變數及陣列宣告 ..................................................... 2-2 2-1-1 初探 var 隱含型別宣告 .................................................... 2-2 2-1-2 隱含型別區域變數(Implicitly Typed Local Variables2-4 2-1-3 隱含型別陣列(Implicitly Typed Arrays..................... 2-5 2-1-4 var 隱含型別區域變數與匿名型別之搭配運用 ................ 2-9 2-1-5 var 隱含型別宣告之特性與限制 .................................... 2-11

ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

6

聖殿祭司的 ASP.NET 3.5專家技術手冊 II 新功能篇 — 使用 C#

目錄

Chapter 01 VS 2008 IDE 整合開發環境新功能介紹

1-1 ASP.NET 3.5技術藍圖總覽 ......................................................... 1-2 1-2 ASP.NET 3.5技術脈絡 ................................................................. 1-7 1-3 VS 2008開發工具版本介紹 .......................................................... 1-9 1-4 VS 2008與 VS 2005環境的共存 ................................................ 1-12 1-5 VS 2008效能改進 ...................................................................... 1-15

1-6 .NET Framework Multi-Targeting ............................................... 1-21 1-7 HTML設計畫面的分割檢視 ....................................................... 1-23 1-8 CSS樣式建置與管理工具 ........................................................... 1-24 1-9 JavaScript IntelliSense支援 ........................................................ 1-25 1-10 JavaScript Debug除錯支援 ......................................................... 1-27 1-11 LINQ與 O/R Mapping設計工具的支援 ..................................... 1-28 1-12 組合管理 C#的 using陳述式 ...................................................... 1-30 1-13 巢狀 Master Pages的支援 ........................................................... 1-33 1-14 透明的 IntelliSense模式 ............................................................. 1-37 1-15 尺規及格線對 WebForm表單的設計輔助 .................................. 1-38 1-16 VS 2008重要 Hot-Fix軟體修正 ................................................. 1-40 1-17 各章範例檔案名稱列表 .............................................................. 1-43 結論 .................................................................................................... 1-44

Chapter 02 C# 3.0語言新功能介紹

2-1 隱含型別區域變數及陣列宣告 ..................................................... 2-2 2-1-1 初探 var隱含型別宣告 .................................................... 2-2 2-1-2 隱含型別區域變數(Implicitly Typed Local Variables) 2-4 2-1-3 隱含型別陣列(Implicitly Typed Arrays) ..................... 2-5 2-1-4 var隱含型別區域變數與匿名型別之搭配運用 ................ 2-9 2-1-5 var隱含型別宣告之特性與限制 .................................... 2-11

Page 2: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

7

目錄

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

2-2 物件初始化設定(Object Initializers) ...................................... 2-13 2-2-1 關於物件的初始化與建構式 .......................................... 2-13 2-2-2 物件初始化設定在類別上之運用 ................................... 2-15

2-3 集合初始化設定(Collection Initializer) .................................. 2-17 2-4 匿名型別(Anonymous Types) ................................................. 2-19

2-5 Lambda Expressions .................................................................... 2-26 2-6 擴充方法(Extension Methods) ................................................ 2-29 2-7 自動屬性實作(Auto-Implemented Properties) ........................ 2-34 2-8 部分方法定義(Partial Method Definitions) ............................. 2-39 結論 .................................................................................................... 2-44

Chapter 03 LINQ新世代資料查詢技術

3-1 LINQ Project緣起與誕生 ............................................................. 3-2 3-2 LINQ架構概觀 ............................................................................. 3-3 3-3 LINQ Query查詢三步驟及延遲查詢特性 ..................................... 3-7

3-4 LINQ to Object ............................................................................ 3-10 3-5 LINQ to ADO.NET ..................................................................... 3-16

3-5-1 LINQ to DataSet ............................................................. 3-16 3-5-2 LINQ to SQL .................................................................. 3-23

3-6 LINQ to XML ............................................................................. 3-39 結論 .................................................................................................... 3-52

Chapter 04 DataSet設計工具與 TableAdapter在資料 存取的應用

4-1 DataSet資料集簡介 ...................................................................... 4-2 4-2 DataSet資料集之存取運用 ........................................................... 4-3 4-3 強型別 DataSet vs. 弱型別 DataSet ............................................... 4-6 4-4 強型別 DataSet建立 ..................................................................... 4-7

4-4-1 以資料來源組態精靈建立強型別 DataSet資料集 ............ 4-8 4-4-2 以 DataSet設計工具設計強型別 DataSet資料集 ........... 4-12

4-5 以 Code-Behind撰寫 TableAdapter程式 .................................... 4-19 4-6 TableAdapter之 Insert、Update、Delete命令撰寫與 參數化運用 ................................................................................. 4-25

Page 3: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

8

聖殿祭司的 ASP.NET 3.5專家技術手冊 II 新功能篇 — 使用 C#

4-7 強型別 DataSet與弱型別 DataSet之效能競賽 ........................... 4-34 4-8 打開強型別 DataSet與 TableAdapter黑箱 ................................. 4-43 4-9 建立 TableAdapter資料庫交易 ................................................... 4-46 結論 .................................................................................................... 4-54

Chapter 05 新世代交易管理機制~System.Transactions

5-1 交易之概念 ................................................................................... 5-2 5-2 傳統的.NET交易技術 .................................................................. 5-3

5-3 Local Transaction vs. Distributed Transaction .............................. 5-6 5-4 System.Transactions交易程式模型 .............................................. 5-7

5-4-1 隱含交易(Implicit Transaction)— 使用 TransactionScope類別 ............................................ 5-7 5-4-2 明確交易(Explicit Transaction)— 使用 Transaction類別 .................................................... 5-11

5-5 System.Transactions輕量級交易管理者 ..................................... 5-15 5-6 資料並行處理與資料庫鎖定 ....................................................... 5-16 5-7 交易隔離等級與範圍的設定 ....................................................... 5-18 結論 .................................................................................................... 5-26

Chapter 06 Cache 2.0第二代的網頁 快取機制 I ~ 網頁輸出快取

6-1 Cache 2.0快取的新功能與增強 .................................................... 6-2 6-2 Cache 2.0快取架構概觀 ............................................................... 6-4 6-3 ASP.NET執行管線與快取原理 .................................................... 6-6 6-4 網頁輸出快取之完整網頁快取 ..................................................... 6-9

6-4-1 完整網頁快取基本觀念 ................................................... 6-9 6-4-2 @OutputCache指示詞詳解 ........................................... 6-13 6-4-3 Response.Cache的程式化 API說明 .............................. 6-17 6-4-4 快取網頁的多個版本 ..................................................... 6-22

6-5 網頁輸出快取之部分網頁快取 ................................................... 6-27 6-5-1 控制項快取 vs. 快取後置換 ........................................... 6-27 6-5-2 控制項快取 .................................................................... 6-29

Page 4: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

9

目錄

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

6-5-3 快取後置換 .................................................................... 6-31 結論 .................................................................................................... 6-36

Chapter 07 Cache 2.0第二代的網頁快取機制 II~ 應用程式資料快取

7-1 應用程式資料快取 ........................................................................ 7-2 7-1-1 Response.Cache 與 Cache[""]物件之比較 ........................ 7-3 7-1-2 System.Web.Caching.Cache類別的應用 .......................... 7-5 7-1-3 以 Cache類別將資料加入快取 ........................................ 7-9 7-1-4 以 Cache類別移除快取項目與通知應用程式 ................ 7-18

7-2 快取資料的自動移除與相依性的應用 ........................................ 7-24 7-2-1 記憶體不足時的快取自動移除 ...................................... 7-25 7-2-2 資料過期時的快取自動移除 .......................................... 7-29 7-2-3 資料相依性改變時的快取自動移除 ............................... 7-31

7-3 Cache物件和 Application物件的比較 ........................................ 7-40 7-4 Cache 2.0快取組態與快取 Profile的運用 .................................. 7-42 結論 .................................................................................................... 7-51

Chapter 08 全新 ASP.NET 3.5之 ListView與 DataPager控制項

前言 ...................................................................................................... 8-2 8-1 ListView控制項 ............................................................................ 8-2 8-2 DataPager控制項 .......................................................................... 8-7 8-3 ListView排序功能及 DataPager分頁外觀樣式設定 ..................... 8-9

8-3-1 ListView控制項的排序功能設定..................................... 8-9 8-3-2 DataPager分頁外觀樣式設定 ........................................ 8-13

結論 .................................................................................................... 8-15

Chapter 09 VS 2008對 CSS樣式建置與 管理之支援

9-1 CSS概觀 ....................................................................................... 9-2 9-2 CSS樣式規則 ................................................................................ 9-3 9-3 CSS樣式類型 ................................................................................ 9-5

Page 5: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

10

聖殿祭司的 ASP.NET 3.5專家技術手冊 II 新功能篇 — 使用 C#

9-4 CSS樣式所在位置 ...................................................................... 9-18 9-5 VS 2008之 CSS樣式建置與管理工具 ........................................ 9-22 9-6 以 VS 2008建置、套用與修改 CSS樣式 ................................... 9-28

9-6-1 以套用樣式視窗建立與套用 CSS樣式 .......................... 9-30 9-6-2 以管理樣式視窗建立與管理 CSS樣式 .......................... 9-36 9-6-3 以 CSS屬性視窗建立與修改 CSS樣式及屬性 .............. 9-38 9-6-4 應用程式樣式套用工具列對 CSS樣式設計的輔助 ....... 9-40

結論 .................................................................................................... 9-43

Chapter 10 CSS在 ASP.NET排版及控制項上的應用

10-1 CSS樣式在 ASP.NET控制項上的應用 ...................................... 10-2 10-2 CSS樣式在 Layout排版上的應用 .............................................. 10-8 10-3 以 CSS樣式製作 GridView控制項的圓角效果 ........................ 10-17 結論 .................................................................................................. 10-25

Chapter 11 VS 2008對 JavaScript及 ASP.NET AJAX之 IntelliSense支援

11-1 JavaScript IntelliSense功能誕生之背景 ..................................... 11-2 11-2 VS 2008之 JavaScript IntelliSense功能意義 .............................. 11-4 11-3 JavaScript IntelliSense之使用與設定 ......................................... 11-6

11-3-1 IntelliSense對 In-line內嵌式 JavaScript之使用與設定 11-6 11-3-2 IntelliSense對 External JavaScript Library 之使用與設定 .............................................................. 11-14

11-4 JavaScript IntelliSense對 ASP.NET AJAX的設定與使用 ........ 11-17 11-5 JavaScript IntelliSense對 Web Service的設定與使用 .............. 11-26 11-6 JavaScript IntelliSense對 JavaScript Class類別的設定與使用 . 11-29 11-7 VS 2008之 JavaScript IntelliSense運作原理的探討 ................ 11-32 11-8 JavaScript IntelliSense支援的物件類型及型別推論 ................. 11-36 結論 .................................................................................................. 11-39

Page 6: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

11

目錄

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

Chapter 12 VS 2008對 JavaScript之 Debug偵錯支援

12-1 JavaScript Debug偵錯支援的重要性 .......................................... 12-2 12-2 VS 2008的 JavaScript程式碼驗證 .............................................. 12-3 12-3 VS 2008偵錯功能的設定與開啟 ................................................ 12-6 12-4 VS 2008的 JavaScript偵錯新功能 .............................................. 12-9

12-4-1 VS 2008支援 JavaScript偵錯中斷點的直接設定 .......... 12-9 12-4-2 支援.aspx、.html、.js類型檔案的 JavaScript中斷點 設定 ............................................................................. 12-10 12-4-3 以新的指令碼文件取代舊的指令碼總管 ..................... 12-14 12-4-4 支援伺服器動態產生的 JavaScript偵錯 ...................... 12-15 12-4-5 支援 Client端與 Server端 JavaScript中斷點對應 與更新 .......................................................................... 12-18 12-4-6 支援 Client Script與 Server Managed Code的 單一偵錯 ...................................................................... 12-22 12-4-7 支援 Web專案 Client端物件的即時運算視窗偵錯 資訊顯示 ...................................................................... 12-23 12-4-8 支援父階層的 Parent Element物件資訊顯示 ............... 12-28 12-4-9 Client端物件視覺化檢視器(Visualizer)的輔助 ....... 12-30

結論 .................................................................................................. 12-33

Chapter 13 ASP.NET 3.5網頁的健康監視~ Health Monitoring

13-1 健康監視的意義與功用 ............................................................... 13-2 13-2 健康監視環境的初始化設定 ....................................................... 13-3 13-3 健康監視運作機制原理 ............................................................... 13-7 13-4 健康監視組態的三劍客- rules、eventMappings與 providers ... 13-8 13-5 細說健康監視 Web事件及 Providers類別階層架構 ................. 13-14 13-6 健康監視 WebHeartbeatEvent心跳事件 ................................... 13-30 13-7 緩衝 ASP.NET健康監視事件 ................................................... 13-33 13-8 自訂健康監視 Web事件 ........................................................... 13-37 結論 .................................................................................................. 13-43

Page 7: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

12

聖殿祭司的 ASP.NET 3.5專家技術手冊 II 新功能篇 — 使用 C#

Chapter 14 Silverlight 1.0開發環境建置及輔助工具應用

14-1 Silverlight 1.0架構 ..................................................................... 14-2 14-2 Silverlight跨平台與跨瀏覽器能力 ............................................. 14-3 14-3 Silverlight功能特徵 .................................................................... 14-7 14-4 Silverlight最佳應用場景(Scenarios) ...................................... 14-7 14-5 微軟 Silverlight官方網站 ........................................................... 14-8 14-6 用戶端 Silverlight的開發環境的建置 ....................................... 14-10 14-7 安裝 VS 2008的 Silverlight專案樣板 ...................................... 14-10 14-8 Silverlight相關輔助資源及開發工具 ....................................... 14-15 結論 .................................................................................................. 14-21

Chapter 15 Silverlight大問哉及專案組成元素功能解說

15-1 觀察 Silverlight專案樣板 ........................................................... 15-2 15-2 Silverlight技術大問哉 ................................................................ 15-3 15-3 解析 Silverlight專案組成元素 .................................................... 15-8 15-4 Silverlight程式深入探討 .......................................................... 15-13

15-4-1 修改 Silverlight載入之屬性參數 ................................. 15-13 15-4-2 JavaScript與 W3C DOM(Document Object Model) 物件的存取 .................................................................. 15-15 15-4-3 JavaScript與 Silverlight Object Model的存取 ............ 15-19 15-4-4 createSilverlight()方法與 Silverlight.js檔之關係 ........ 15-21

結論 .................................................................................................. 15-23

Chapter 16 Silverlight應用程式的開發 I~文字、影像與 繪圖

16-1 Silverlight常用物件 .................................................................... 16-2 16-2 XAML語法簡介 ......................................................................... 16-3 16-3 XAML的特性 ............................................................................. 16-9 16-4 Canvas物件 .............................................................................. 16-10 16-5 Silverlight文字功能概觀及應用 ............................................... 16-12

16-5-1 TextBlock文字區塊 ..................................................... 16-13

16-5-2 Run Element ................................................................ 16-20

Page 8: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

13

目錄

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

16-5-3 Glyphs .......................................................................... 16-23 16-6 Silverlight繪圖(Shape)之應用 ............................................. 16-25 16-7 Silverlight影像(Image)之應用 ............................................. 16-31

16-7-1 Image影像 ................................................................... 16-33 16-7-2 ImageBrush影像筆刷 .................................................. 16-35 16-7-3 Image影像的裁切(Clip) .......................................... 16-37 16-7-4 Image影像的 Stretch伸展模式 .................................... 16-40

結論 .................................................................................................. 16-42

Chapter 17 Silverlight應用程式的開發 II~影音及動畫

前言 .................................................................................................... 17-2 17-1 Silverlight影音播放(Audio & Video)之應用 ......................... 17-2

17-1-1 Audio聲音播放 .............................................................. 17-4 17-1-2 Video影片播放 ............................................................ 17-11

17-2 Silverlight基本動畫製作之應用 ............................................... 17-15 17-2-1 動畫基本原理 .............................................................. 17-15 17-2-2 手工動畫製作的繁瑣過程 ............................................ 17-15 17-2-3 Silverlight動畫系統(Animation System) ................. 17-17 17-2-4 屬性動畫系統(Property Animation System) ............ 17-18

17-3 以 JavaScript控制 Storyboard動畫之執行 ............................... 17-30 17-3-1 以 JavaScript控制 Storyboard動畫之執行 .................. 17-31 17-3-2 Resources資源定義 ..................................................... 17-36 17-3-3 Silverlight對滑鼠事件(Mouse Events)的支援 ......... 17-39

結論 .................................................................................................. 17-44

Page 9: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

14

聖殿祭司的 ASP.NET 3.5專家技術手冊 II 新功能篇 — 使用 C#

範例目錄

Chapter 01 VS 2008 IDE整合開發環境新功能介紹

範例 1-1 檢視 CLR 引擎版本號碼 .................................................... 1-6 範例 1-2 使用 VS 2008 進行巢狀 Master Pages 的設計 .................. 1-33

Chapter 02 C# 3.0語言新功能介紹

範例 2-1 基本 var 隱含型別區域變數宣告 ........................................ 2-5 範例 2-2 隱含型別陣列之定義與查詢運用 ....................................... 2-7 範例 2-3 var 隱含型別區域變數宣告配合匿名型別的彈性變化 ....... 2-9 範例 2-4 使用物件初始化設定初始化 Customer 類別 ..................... 2-16 範例 2-5 集合初始化設定 ............................................................... 2-18 範例 2-6 匿名型別物件的建立及使用 ............................................. 2-22 範例 2-7 探索匿名型別物件之型別與名稱 ..................................... 2-23 範例 2-8 隱含型別陣列結合物件初始化設定- 以模特兒經濟公司為例 .................................................... 2-24 範例 2-9 Lambda Expressions 在 Delegate 委派上的應用 ............... 2-26 範例 2-10 Lambda Expressions 在 Standard Query Operators 上 的應用 .............................................................................. 2-27 範例 2-11 使用擴充方法擴充 string 型別方法 .................................. 2-29 範例 2-12 使用系統預設之擴充方法 ................................................ 2-33 範例 2-13 自動屬性實作與傳統屬性程式之對比 .............................. 2-38 範例 2-14 部分方法的建立與應用 .................................................... 2-40

Chapter 03 LINQ新世代資料查詢技術

範例 3-1 以 LINQ 查詢 Array 陣列 element 成員資料 ..................... 3-11 範例 3-2 以 LINQ 查詢 LIST 陣列 element 成員資料 ..................... 3-12 範例 3-3 LINQ 在 System.IO 檔案讀取方面的應用 ........................ 3-14

Page 10: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

15

範例目錄

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

範例 3-4 以 LINQ to DataSet 查詢弱型別 DataSet .......................... 3-17 範例 3-5 以 LINQ to DataSet 查詢強型別 DataSet .......................... 3-20 範例 3-6 純手工 LINQ to SQL 程式 ................................................ 3-27 範例 3-7 自訂 LINQ to SQL Entity 欄位名稱 .................................. 3-30 範例 3-8 以 O/R Designer 建立 Entity 類別定義 ............................. 3-33 範例 3-9 O/R Designer 結合 LinqDataSource 的全自動化 ............... 3-36 範例 3-10 以 LINQ to XML 載入 XML 檔案並讀取資料 .................. 3-40 範例 3-11 以 XElement 建立 XML Tree,並以 LINQ 查詢結果 ....... 3-43 範例 3-12 以 XDocument 建立 XML Tree,並以 LINQ 查詢結果 .... 3-47 範例 3-13 以 XAttribute 建立 XElement 之屬性 ................................ 3-50

Chapter 04 DataSet設計工具與 TableAdapter在資料 存取的應用

範例 4-1 傳統 ADO.NET 程式與 TableAdapter 程式之對比 ............. 4-4 範例 4-2 以資料來源組態精靈建立強型別 DataSet 資料集 .............. 4-8 範例 4-3 以 ObjectDataSource 控制項讀取強型別 DataSet 資料 ....... 4-9 範例 4-4 以 TableAdapter 建立 DataTable 定義及查詢 (單一資料表 Table 查詢) .............................................. 4-13 範例 4-5 以 TableAdapter 建立 DataTable 定義及查詢 (多個資料表 Table 查詢) .............................................. 4-16 範例 4-6 撰寫基本的 TableAdapter Code-Behind 程式 ................... 4-19 範例 4-7 逐一讀取強型別 DataSet 中之 DataRow 資料列 ............... 4-22 範例 4-8 強型別 DataSet 與 SqlDataAdapter 之搭配 ....................... 4-24 範例 4-9 使用 TableAdapter 預設之 Select、Insert、Update 與 Delete 命令 ....................................................................... 4-26 範例 4-10 建立 TableAdapter 的參數型 Select 查詢 .......................... 4-30 範例 4-11 強型別 DataSet 與弱型別 DataSet 資料載入與讀取測試 .. 4-35 範例 4-12 檢視強型別 DataSet 與 TableAdapter 內部程式 ................ 4-44 範例 4-13 仿傳統 ADO.NET 過程建立 TableAdapter 資料庫 交易機制 ........................................................................... 4-48 範例 4-14 以 System.Transactions 建立 TableAdapter 程式的 交易機制 ........................................................................... 4-52

Page 11: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

16

聖殿祭司的 ASP.NET 3.5專家技術手冊 II 新功能篇 — 使用 C#

Chapter 05 新世代交易管理機制~System.Transactions

範例 5-1 使用 TransactionScope 建立隱含交易 ................................ 5-8 範例 5-2 使用 CommittableTransaction 建立明確交易 .................... 5-11 範例 5-3 設定 CommittableTransaction 環境交易(Ambient) ...... 5-13 範例 5-4 在明確交易中設定隔離等級 ............................................. 5-21 範例 5-5 在隱含交易中設定隔離等級 ............................................. 5-24

Chapter 06 Cache 2.0第二代的網頁 快取機制 I ~ 網頁輸出快取

範例 6-1 以@ OutputCache 指示詞宣告網頁輸出快取 ................... 6-10 範例 6-2 以 Response.Cache 的程式化 API 設定網頁輸出快取 ...... 6-12 範例 6-3 使用參數快取網頁的多個版本 (以@ OutputCache 指示詞) ......................................... 6-23 範例 6-4 使用參數快取網頁的多個版本 (以 Response.Cache 程式) ............................................ 6-24 範例 6-5 以使用者控制項進行 ASP.NET 網頁的部分快取 ............. 6-30 範例 6-6 使用 Substitution 控制項建立快取後置換功能 ................. 6-31 範例 6-7 使用 Substitution 控制項 API 建立快取後置換功能 ......... 6-33 範例 6-8 使用 HttpResponse.WriteSubstitution 方法 實現快取後置換功能 ........................................................ 6-34 範例 6-9 使用 AdRotator 控制項實現快取後置換 ........................... 6-35

Chapter 07 Cache 2.0第二代的網頁快取機制 II~ 應用程式資料快取

範例 7-1 觀察 Web 網站的應用程式定義域 ...................................... 7-7 範例 7-2 使用「索引鍵/數值」將資料項目加入快取中 ................. 7-9 範例 7-3 使用「索引鍵/數值」快取 DataSet ............................... 7-11 範例 7-4 使用 Cache.Add()方法將資料項目加入快取中 ................ 7-14 範例 7-5 使用 Cache.Insert()方法將資料項目加入快取中 .............. 7-17 範例 7-6 使用 Cache.Insert()方法指定 XML 檔案快取相依性 ........ 7-17 範例 7-7 使用 Cache.Remove()方法將資料項目從快取中移除 ....... 7-19

Page 12: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

17

範例目錄

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

範例 7-8 使用 CacheItemRemovedCallback 委派建立 快取移除通知 ................................................................... 7-20 範例 7-9 指定快取項目的優先權(CacheItemPriority) ................ 7-26 範例 7-10 設定 Web 應用程式快取記憶體大小 ................................ 7-28 範例 7-11 設定資料項目的快取期限(Expiration) ......................... 7-29 範例 7-12 設定快取的索引鍵相依性 ................................................. 7-33 範例 7-13 設定快取的檔案相依性 .................................................... 7-36 範例 7-14 設定快取項目的彙總相依性 ............................................. 7-37 範例 7-15 以程式讀寫<OutputCache />區段設定值 .......................... 7-45 範例 7-16 以程式讀寫<OutputCacheSettings> 區段設定值 .............. 7-47 範例 7-17 網頁套用快取 Profile 設定 ................................................ 7-50

Chapter 08 全新 ASP.NET 3.5之 ListView與 DataPager控制項

範例 8-1 使用 ListView 控制項顯示資料 .......................................... 8-2 範例 8-2 以獨立的 DataPager 控制項設定 ListView 控制項的分頁 .. 8-8 範例 8-3 自訂 ListView 控制項排序 ................................................ 8-10 範例 8-4 DataPager 控制項的分頁及外觀樣式設定 ........................ 8-13

Chapter 09 VS 2008對 CSS樣式建置與管理之支援

範例 9-1 CSS 樣式的定義與套用(Element-based Selector) .......... 9-4 範例 9-2 ID 型樣式的定義與使用(ID-based Selector) .................. 9-8 範例 9-3 以類別型樣式設定個別網頁 element 元素 (Class-based Selector) .................................................. 9-12 範例 9-4 以類別型樣式設定套用樣式條件 ..................................... 9-14 範例 9-5 外部 CSS 樣式檔的定義與使用 ........................................ 9-19 範例 9-6 以【套用樣式視窗】建立與套用 CSS 樣式 ...................... 9-30 範例 9-7 以【管理樣式視窗】移動 CSS 樣式位置 ......................... 9-37 範例 9-8 自動模式下的 CSS 樣式設計 ............................................ 9-41

Chapter 10 CSS在 ASP.NET排版及控制項上的應用

範例 10-1 在 ASP.NET 控制項套用內部 CSS 樣式定義 ................... 10-3

Page 13: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

18

聖殿祭司的 ASP.NET 3.5專家技術手冊 II 新功能篇 — 使用 C#

範例 10-2 在 ASP.NET 控制項套用外部 CSS 樣式定義 ................... 10-6 範例 10-3 以 CSS 樣式進行兩欄式文字排版 .................................... 10-8 範例 10-4 CSS 之兩欄式排版在 ASP.NET 控制項的運用 .............. 10-12 範例 10-5 以 CSS 樣式進行網頁完整的排版 .................................. 10-14 範例 10-6 以 CSS 樣式設計文字段落的圓角 .................................. 10-19 範例 10-7 替 GridView 控制項加上圓角 ......................................... 10-21

Chapter 11 VS 2008對 JavaScript及 ASP.NET AJAX之 IntelliSense支援

範例 11-1 JavaScript IntelliSense 對自訂 JavaScript 變數的 自動完成文字支援 ............................................................ 11-7 範例 11-2 JavaScript IntelliSense 對列出成員的支援 ....................... 11-9 範例 11-3 建立 JavaScript IntelliSense 的參數資訊 ........................ 11-11 範例 11-4 建立 JavaScript IntelliSense 快速諮詢及 參數資訊之說明文字提示 .............................................. 11-12 範例 11-5 外部多重 JavaScript 檔之間的 JavaScript IntelliSense 設定 ................................................................................ 11-15 範例 11-6 Microsoft AJAX Library 七大命名空間及 類別 IntelliSense 的使用 ................................................. 11-20 範例 11-7 一般 ASP.NET Web Form 或.html 的 JavaScript IntelliSense 支援性 ........................................ 11-22 範例 11-8 外部 JavaScript 檔參考使用 Microsoft AJAX Library .... 11-24 範例 11-9 Web Service IntelliSense 之設定與使用 ......................... 11-26 範例 11-10 JavaScript 類別的建立、使用及 加入 IntelliSense 註解說明 ............................................. 11-30 範例 11-11 JavaScript 型別推論能力的練習 ..................................... 11-37

Chapter 12 VS 2008對 JavaScript之 Debug偵錯支援

範例 12-1 使用 VS 2008 開發工具進行 JavaScript 程式的驗證 ........ 12-4 範例 12-2 HTML 頁面的 JavaScript 中斷點設定與偵錯 ................. 12-10 範例 12-3 主版頁面的 JavaScript 中斷點設定與偵錯 ..................... 12-13 範例 12-4 針對 ScriptManager 控制項產生的 JavaScript 進行偵錯 12-16 範例 12-5 Client 端與 Server 端 JavaScript 中斷點對應與雙向更新 12-20

Page 14: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

19

範例目錄

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

範例 12-6 Client Script 與 Server Managed Code 的單一偵錯 ......... 12-22 範例 12-7 即時運算視窗用於 Web Client 端的偵錯 ........................ 12-24 範例 12-8 察看 HTML 物件的父階層 parentElement 物件資訊 ...... 12-28 範例 12-9 以視覺化檢視器檢視物件資料 ....................................... 12-30

Chapter 13 ASP.NET 3.5網頁的健康監視~ Health Monitoring

範例 13-1 初始化建立健康監視環境 ................................................. 13-3 範例 13-2 獨立註冊健康監視使用的 SQL Server 資料表 .................. 13-5 範例 13-3 將使用者 Login 失敗的 Web 事件寫入到 SQL Server 資料庫 ............................................................................ 13-19 範例 13-4 記錄 URL 授權成功事件至 SQL Server 資料庫 .............. 13-22 範例 13-5 以電子郵件傳送健康監視通知訊息 ................................ 13-24 範例 13-6 使用 WMI 監視網頁健康狀況 ......................................... 13-26 範例 13-7 定期引發的 WebHeartbeatEvent 健康監視事件 .............. 13-30 範例 13-8 SqlWebEventProvider 使用緩衝機制 .............................. 13-36 範例 13-9 SimpleMailWebEventProvider 使用緩衝機制 ................. 13-36 範例 13-10 建立與使用自訂健康監視的 Web 事件 ........................... 13-38

Chapter 14 Silverlight 1.0開發環境建置及輔助工具應用

範例 14-1 在 VS 2008 建立 Silverlight 1.0 的專案樣板 ................... 14-11 範例 14-2 使用 VS 2008 建立第一個 Silverlight 專案程式 ............. 14-13

Chapter 15 Silverlight大問哉及專案組成元素功能解說

範例 15-1 建立 Silverlight 網頁程式 ............................................... 15-10 範例 15-2 修改 Silverlight 控制項的載入特性 ................................ 15-13 範例 15-3 以 JavaScript 存取 HTML DOM 之中的元素 .................. 15-15

Chapter 16 Silverlight應用程式的開發 I~文字、影像與 繪圖

範例 16-1 XAML 語法的逐步宣告 .................................................... 16-4 範例 16-2 Canvas 物件在排版上的應用 .......................................... 16-10

Page 15: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

20

聖殿祭司的 ASP.NET 3.5專家技術手冊 II 新功能篇 — 使用 C#

範例 16-3 以 TextBlock 顯示基本的文字資訊 ................................ 16-15 範例 16-4 變化 TexBlock 文字大小、粗細與樣式 .......................... 16-16 範例 16-5 TextBlock 文字透明度(Opacity)的運用 ..................... 16-17 範例 16-6 TextBlock 文字的裁切 .................................................... 16-18 範例 16-7 RUN 在文字上的應用 ..................................................... 16-21 範例 16-8 Glyphs 文字雕刻的基本運用 .......................................... 16-24 範例 16-9 基本的矩形繪圖 ............................................................. 16-26 範例 16-10 基本橢圓形與圓形的繪製 .............................................. 16-27 範例 16-11 直線繪圖的應用 ............................................................. 16-28 範例 16-12 基本的 Polygon 多邊形繪圖 ........................................... 16-29 範例 16-13 基本的 Ployline 多線形繪圖 ........................................... 16-30 範例 16-14 以 Image 顯示影像圖片 .................................................. 16-34 範例 16-15 利用 ImageBrush 影像筆刷顯示照片 .............................. 16-36 範例 16-16 影像圖片的裁切 ............................................................. 16-38 範例 16-17 Image 的 Stretch 伸展模式(圖片<區域) .................... 16-40

Chapter 17 Silverlight應用程式的開發 II~影音及動畫

範例 17-1 基本的 Audio 聲音播放 .................................................... 17-5 範例 17-2 調整 MediaElement 的 Volume 及 Balance ....................... 17-7 範例 17-3 聲音播放的進階控制 ........................................................ 17-8 範例 17-4 基本 Video 影片的播放 .................................................. 17-11 範例 17-5 旋轉 Video 影片 ............................................................. 17-12 範例 17-6 影片的裁切(Clip) ....................................................... 17-13 範例 17-7 影片播放的進階控制 ...................................................... 17-14 範例 17-8 製作矩形長度與寬度由小變大之動畫 ............................ 17-22 範例 17-9 製作矩形的旋轉效果的動畫 ........................................... 17-27 範例 17-10 透過滑鼠 Click 事件進行矩形 Shape 的動畫旋轉 .......... 17-32 範例 17-11 將 Storyboard 動畫腳本集中到 Resources 之中 .............. 17-37 範例 17-12 滑鼠 MouseLeftButtonDown 事件的應用 ....................... 17-40 範例 17-13 滑鼠 MouseEnter 與 MouseLeave 事件的運用 ................ 17-42

Page 16: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

6-6

聖殿祭司的 ASP.NET 3.5 專家技術手冊 II 新功能篇 — 使用 C#

6-3 ASP.NET 執行管線與快取原理

對 ASP.NET 有點基礎的人或多或少都聽過:「ASP.NET 第一執行網

頁會較慢,因為系統會執行網頁編譯動作,故第一次執行時會察覺到網

頁有些停頓或緩慢;而第二次再執行相同網頁,系統就會以編譯過的程

式來回應 Request 請求,故第二次以後執行效能就會快很多。」這是大家

常耳熟能詳的一個論調,相信各位應不陌生才是。

但為什麼要提這點?理由是若要解釋快取(Cache)之所以能夠加速

網頁運作的原因,前提是必須要先瞭解 ASP.NET 執行管線是如何運行

的,從 ASP.NET 執行過程中,剛好可以找到 ASP.NET 第一執行網頁會

較慢,第二次以後速度較快的理由;若進一步在 ASP.NET 執行管線中加

入快取機制時,快取會如何改變系統運作流程,進而再次加速網頁運作

效能,以致快取可以比單純編譯過後的網頁效能還快。

祭司將介紹與解釋下面兩個原理,並且加以比較,各位就會明白為

什麼快取的對網頁執行速度的增強。

1. ASP.NET 執行管線(Pipeline)運作原理。

2. ASP.NET 快取運作原理。

下圖為 ASP.NET 執行管線的流程圖(沒有加入快取設定),當使用

者第一次執行網頁 Page.aspx 時,其運作過程為: Browser 瀏覽器發出

第一個網頁 Request 請求,系統首先會 Parse 解析網頁 進而呼叫

Compiler 編輯程式 將網頁程式轉換為 Assembly Intermediate Language 最後系統再經由 JIT編譯器將 Assembly IL轉換成特定 CPU類型(如 x86 或 x64)所能執行的指令 Web Server 將 HTML 頁面回

傳給 Browser 瀏覽器,並顯示最後結果在畫面上,如此便完成網頁執行

的過程。

Page 17: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

6-7

Cache 2.0 第二代的網頁快取機制 I ~ 網頁輸出快取

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

圖 6-4 ASP.NET 執行流程圖(第一次,無快取機制)

然而下圖是第二次執行相同的網頁 Page.aspx,系統會略過 Parse 解

析與 Compile Assembly IL 兩個階段,由原來的五個執行階段減為三個,

並且由於節省了兩個階段的執行工作,可以節省不少額外的時間,因此

第二次以後的所有網頁 Request 請求,會比第一次快很多的原因在此。

圖 6-5 ASP.NET 執行流程圖(第二次,無快取機制)

Page 18: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

6-8

聖殿祭司的 ASP.NET 3.5 專家技術手冊 II 新功能篇 — 使用 C#

雖然編譯式的網頁程式較傳統直譯式的網頁程式執行效能快,但是

人類對於效能的渴望是永遠不滿足的,那是否有辦法再進一步提升編譯

後的網頁執行速度?有,答案就是使用快取(Cache)來再次縮短 ASP.NET執行管線,便可以得到更短的網頁 Response 回應時間。

下圖中,我們在傳統的 ASP.NET 網頁中加入快取機制,其第一次執

行 Page.aspx 網頁後,便會將最終的 HTML Render 輸出快取在記憶體之

中(圖 6-6 的第 階段);而當第二次再執行 Page.aspx 網頁時(圖 6-7),整個執行過程會略過 Parse、Compiler 與 Assembly IL 三個階段,且系統

連動態運算生成或資料庫存取的動作都略過,直接將快取記憶體中的

HTML Render 回傳給 Browser 瀏覽器顯示。故各位可以比較圖 6-5 與圖

6-7,同樣是第二次以後執行的過程,前者沒有加入快取,而後者有加入

快取,前者需要三個階段,後者只需二個階段,並且連 Init、Load、Render的運算階段都省略了,省掉了一堆 CPU 計算與資料庫存取等等,無怪乎

快取具有無與倫比的執行效能,各位應能理解了吧。

圖 6-6 ASP.NET 執行流程圖(第一次,有快取機制)

Page 19: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

6-9

Cache 2.0 第二代的網頁快取機制 I ~ 網頁輸出快取

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

圖 6-7 ASP.NET 執行流程圖(第二次,有快取機制)

6-4 網頁輸出快取之完整網頁快取

網頁輸出快取(圖 6-3)是 ASP.NET 2.0 快取架構兩大類型之一,其

目的是針對網頁 Page 來進行快取,而其又可細分為: 完整網頁快取、

部分網頁快取,本小節主要是談完整網頁快取(Full Page Caching),

而部分網頁快取(Partial Page Caching)則挪到下一小節再談。

6-4-1 完整網頁快取基本觀念

所謂的完整網頁快取(Full Page Caching)就是針對整個網頁 Page頁面進行快取,其所儲存的是第一次網頁執行後,Page 頁面最終的 HTML Render 呈現畫面資料。除了第一次是必須經過 ASP.NET 動態運算生成,

包括了:商業邏輯運算、資料庫存取、控制項生成等等瑣碎工作,最終

會形成一堆 HTML 的標籤回傳給使用者端的 Browser 瀏覽器,進而呈現

畫面;而這個最終的一堆 HTML 標籤就會被快取到記憶體之中,往後第

二次以後的所有 Request 請求,伺服器皆會直接把快取所保存的 HTML

Page 20: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

6-10

聖殿祭司的 ASP.NET 3.5 專家技術手冊 II 新功能篇 — 使用 C#

標籤回傳給使用者端的瀏覽器,如此 Response 回應速度便會快很多(圖

6-3)。

而網頁輸出快取可以使用兩種方式來達成:

1. 以<%@ OutputCache … %>指示詞宣告(高階)。

2. 以 Response.Cache 的程式化 API 方式設定(低階)。

@ OutputCache 指示詞宣告

如果要對一個網頁 Page 加入完整網頁快取 60 秒,你可以在.aspx網頁中加入一段語法宣告:

<%@ OutputCache Duration="60" VaryByParam="None" %>

Response.Cache 的程式化 API 語法

若以程式化 API 方式,在 Code-Behind 程式中設定 60 秒的網頁

快取,語法如下:

Response.Cache.SetExpires(Now.AddSeconds(60));

然而在深入解釋@ OutputCache 指示詞和 Response.Cache 的程式化

API 之前,我們先來練習兩個簡單例子,讓大家有實際初步的概念。

範例 6-1 以@ OutputCache 指示詞宣告網頁輸出快取

本範例示範在一個普通的 .aspx 網頁加入快取機制,利用 @ OutputCache 指示詞將整個網頁 Page 快取 60 秒,請參考 FullPageCaching. aspx 程式,步驟說明如下:

圖 6-8 以@OutputCache 宣告完整網頁快取

員工資料庫

快取起始時間

Page 21: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

6-11

Cache 2.0 第二代的網頁快取機制 I ~ 網頁輸出快取

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

:建立 GridView 與 SqlDataSource 控制項

畫面中透過 GridView 與 SqlDataSource 控制項顯示 Northwind 資料庫中

Employees 員工資料。

:加入@ OutputCache 指示詞宣告

請切換到【原始檔】模式,在@ Page 指示詞該行之後,加入@ OutputCache指示詞宣告網頁快取,程式碼如下:

<%@ Page Language="C#" ... %>

<%@ OutputCache Duration="60" VaryByParam="None" %>

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

<head runat="server">

<title>未命名頁面</title>

</head>

<body>

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

<div>

<asp:GridView ID="GridView1" runat="server" ...>

...略

</asp:GridView>

</div>

<asp:SqlDataSource ID="SqlDataSource1" ...>

</asp:SqlDataSource>

</form>

</body>

</html>

:加入快取起始時間顯示

請在 FullPageCaching.aspx 加入顯示快取時間程式:

01 protected void Page_Load(object sender, EventArgs e) 02 { 03 Response.Write("快取網頁起始時間:" + DateTime.Now.ToLongTimeString());

04 }

SStteepp 33

SStteepp 22

SStteepp 11

STEP 1

Page 22: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

6-12

聖殿祭司的 ASP.NET 3.5 專家技術手冊 II 新功能篇 — 使用 C#

程式說明:

其實整個範例只有一個重點,就是在 Step 2 加入一行 <%@ OutputCache …>宣告,如此網頁 Page 就完成了快取設定。

然而在圖 6-8 執行畫面中,有兩個地方是值得加以探討的: 快取起

始時間、 員工資料庫,範例中這兩個部分並非純粹好玩的,而是刻意

設計的,理由是快取設定後,是無法視覺化看到快取的,故我們必須透

過第三者來顯現快取的能力,您可以進行兩個測試動作,來確認快取作

用的真實性:

測試一:重新整理網頁(Refresh)測試

請在 IE 瀏覽器按下【重新整理】圖示,將網頁重新整理,時間

顯示格式是“時:分:秒”,但您可以發現無論您重新整理網頁

幾次,時間仍是固定不動,為什麼會這樣,這說明了什麼?您可

以參考 ASP.NET 執行流程圖(圖 6-7)的說明,當網頁快取後,

就不再執行 Init、Load、Render 的運算階段,當然也不會再執行

Code-Behind 時間顯示的程式碼,而是將記憶體中的快取直接回

應給前端瀏覽器,因此您才會看到時間是原始的快取,必須等待

60 秒後,快取才會失效,進而重新進行快取。

測試二:修改 Employees 資料記錄測試

在執行網頁後,您可立刻修改 SQL Server 資料庫的 Employees

員工資料,並加以儲存,然後重新 Refresh 網頁畫面,您會發現

GridView 資料仍然是舊的員工資料,這說明了快取正在作用(測

試的所有動作必須在快取後的 60 秒內完成)。

故經由以上兩個測試,我們可以百分之百確認快取存在的真實性

了,也能更直接體會快取作用的現象。

範例 6-2 以 Response.Cache 的程式化 API 設定網頁輸出快取

上一個範例是透過@OutputCache 指示詞宣告網頁快取,如果你想用

程式化 API 方式在 Code-Behind 中宣告也可以,請參考 FullPageCaching API.aspx 程式:

Page 23: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

6-13

Cache 2.0 第二代的網頁快取機制 I ~ 網頁輸出快取

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

01 protected void Page_Load(object sender, EventArgs e) 02 { 03 //加入快取宣告,設定快取過期時間為 60 秒

04 Response.Cache.SetExpires(DateTime.Now.AddSeconds(60)); 05 Response.Cache.SetCacheability(HttpCacheability.Public); 06 07 Response.Write("快取網頁起始時間:" + DateTime.Now.ToLongTimeString());

08 }

程式說明:

原則上是只要設定 Cache.SetExpires()過期時間就可以了,但祭司實

地測試發現,您必須進一步將 HttpCacheability 設定為 Public,則快取才

會正常作用。

在面對網頁輸出快取方式有兩種 指示詞宣告、 程式化 API,撇開

個人喜好的因素外,兩者之間還是有不同適用的情況,如@ OutputCache指示詞宣告適合用在「如果在設計階段(Design time)就知道網頁的快

取性設定需求,就可以用宣告方式設定快取性。」而程式化 API 適合用

在「如果應用程式會根據執行階段(Runtime)條件判斷快取性,例如讀

取要求標頭,就可以用程式設計方式設定快取性。」此為一個判斷適用

性的準測。

6-4-2 @OutputCache 指示詞詳解

在做過上面兩個範例後,以下將進一步解釋網頁輸出快取的@ OutputCache 指示詞,以下是@ OutputCache 指示詞宣告完整語法:

<%@ OutputCache

Duration="#ofseconds"

Location="Any | Client | Downstream | Server | None | ServerAndClient "

Shared="True | False"

VaryByControl="controlname"

VaryByCustom="browser | customstring"

VaryByHeader="headers"

VaryByParam="parametername"

CacheProfile="cache profile name | ' ' "

NoStore="true | false"

SqlDependency="database/table name pair | CommandNotification"

%>

Page 24: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

6-14

聖殿祭司的 ASP.NET 3.5 專家技術手冊 II 新功能篇 — 使用 C#

以上語法中粗體字部分是 Cache 2.0 所增加的新功能,各位可以對照

下面 Cache 1.0 舊語的@ OutputCache 指示詞語法:

<%@ OutputCache

Duration="#ofseconds"

Location="Any | Client | Downstream | Server | None"

Shared="True | False"

VaryByControl="controlname"

VaryByCustom="browser | customstring"

VaryByHeader="headers"

VaryByParam="parametername"

%>

@ OutputCache 指示詞其參數意義說明如下(約略看過即可):

1. Duration

網頁或使用者控制項被快取的時間,以秒為單位。在網頁或使用

者控制項上設定這個屬性,會建立 HTTP 從物件回應的過期原

則,並且會自動快取網頁或使用者控制項輸出。

這是必要屬性。如果您不包含它的話,就會發生剖析器(Parser)

錯誤。

2. Location

Location 是來控制資源輸出快取 HTTP 回應的位置。而 Location是 OutputCacheLocation 其中一個列舉值,而完整的列舉值成員

說明如下表。

表 6-1 OutputCacheLocation 列舉成員

成員名稱 說明

Any(預設值)

輸出快取可以位在瀏覽器用戶端 (要求的來源)、參予

要求的 Proxy 伺服器 (或任何其他的伺服器) 或要求已

處理的所在伺服器上。這個值對應於 HttpCacheability. Public 列舉值。

Page 25: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

6-15

Cache 2.0 第二代的網頁快取機制 I ~ 網頁輸出快取

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

成員名稱 說明

Client 輸出快取位在要求所來自的瀏覽器用戶端。這個值對

應於 HttpCacheability.Private 列舉值。

Downstream

輸出快取可以儲存在任何 HTTP 1.1 快取功能裝置中,

而不可以儲存在來源伺服器中。這包含 Proxy 伺服器

和提出要求的用戶端。

None 輸出快取會針對要求的頁面停用。這個值對應於 HttpCacheability.NoCache 列舉值。

Server 輸出快取位在要求已處理的 Web 伺服器上。這個值對

應於 HttpCacheability.Server 列舉值。

ServerAndClient

輸出快取只可以儲存在原始伺服器或提出要求的用戶

端。Proxy 伺服器不能快取回應。這個值對應於

HttpCacheability.Private 和 HttpCacheability.Server 列舉

值的組合。

3. Shared

Shared 是用來決定使用者控制項輸出是否可以與多重網頁共

用。其為布林 (Boolean) 值,預設值為 false。

1. ASP.NET Web網頁(.aspx 檔案)包含的@ OutputCache指示

詞不支援 Shared這個屬性。

2. 只有部分網頁快取有支援 Share功能,而完整網頁快取則不支

援。

4. VaryByControl

用來變更使用者控制項輸出快取的分號分隔字串清單。這些字串

表示在使用者控制項中所宣告之ASP.NET伺服器控制項的 ID屬

性值。

5. VaryByCustom

表示自訂輸出快取需求的任何文字。如果這個屬性被賦予

Browser 的值,那麼快取將會依瀏覽器名稱和主要版本資訊而不

Page 26: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

6-16

聖殿祭司的 ASP.NET 3.5 專家技術手冊 II 新功能篇 — 使用 C#

同。如果輸入自訂字串,您就必須覆寫在應用程式之 Global.asax 檔案中的 GetVaryByCustomString 方法。

6. VaryByHeader

用來變更輸出快取之分號分隔的 HTTP 標頭清單。當這個屬性設

定為多個頁首時,輸出快取便會包含每個指定頁首組合所要求文

件的不同版本。

7. VaryByParam

用來變更輸出快取的分號分隔的字串清單。根據預設,這些字串

對應至以 GET 方法屬性傳送的查詢字串值,或是使用 POST 方法傳送的參數。當這個屬性被設定為多個參數時,輸出快取便會

包含每個指定參數組合所要求文件的不同版本。可能的值包括 none、星號 (*),以及任何有效的查詢字串或 POST 參數名稱。

8. CacheProfile

要與網頁關聯之快取設定的名稱。這是選擇性屬性,預設值為空

字串 ("")。

9. NoStore

布林 (Boolean) 值,決定是否防止敏感資訊的次要儲存區。

使用者控制項(.ascx 檔案)包含的 @ OutputCache 指示詞不支

援 NoStore這個屬性。將這個屬性設定為 true,相當於 Runtime

時期的程式 Response.Cache.SetNoStore();

10. SqlDependency

字串值,用以辨識網頁或控制項之輸出快取所相依的資料庫集和

資料表名稱組。請注意,SqlCacheDependency 類別會監視輸出

快取所相依之資料庫中的資料表,因此當資料表中的項目更新

時,這些項目便會在使用資料表架構的輪詢時從快取移除。在以 CommandNotification 值使用通知時 (在 Microsoft SQL Server 2005 中),SqlDependency 類別最終會用來向 SQL Server 2005 伺服器註冊查詢通知。

Page 27: ASP.NET 3.5 II C#epaper.gotop.com.tw/pdf/ACL023900.pdf · 8 聖殿祭司的ASP.NET 3.5 專家技術手冊II 新功能篇 — 使用C# 4-7 強型別DataSet與弱型別DataSet之效能競賽

6-17

Cache 2.0 第二代的網頁快取機制 I ~ 網頁輸出快取

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

SqlDependency 屬性的 CommandNotification值只會在 Web網

頁 (.aspx)上有效。使用者控制項只能使用運用@ OutputCache

指示詞的資料表架構輪詢。

最後,@ OutputCache 指示詞必須和 VaryByParam 或 VaryByControl二者之一同時搭配使用,這是最基本的要求,例如:

<%@ OutputCache Duration="60" VaryByParam=" " %>

<%@ OutputCache Duration="60" VaryByControl=" " %>

6-4-3 Response.Cache 的程式化 API 說明

前一小節雖然將@ OutputCache 指示詞所有參數詳細列出,但可別以

為快取的設定全部都講完了,事實上在程式化快取 API 部分,仍然有許

多屬性、功能與方法是@ OutputCache 指示詞裡面所沒有的,有許多知識

面要進一步地來探索。

回顧範例 6-2 中,我們使用下列 API 程式來宣告網頁的快取:

Response.Cache.SetExpires(Now.AddSeconds(60));

Response.Cache.SetCacheability(HttpCacheability.Public);

關鍵指令是 Response.Cache 屬性,它是用以取得網頁快取原則

(Caching Policy),包括了:到期、私密性與 Vary 子句等等,因此某些

方面,我們可以將設定快取視為一堆原則(ploicy)的設定,以便讓系統

知道我們所希望的快取是長什麼樣子。既然快取等於是在設定 Policy 原

則,若更進一步探究這個 Policy,其實背後指的就是 HttpCachePolicy 類

別,下圖是 HttpCachePolicy 重要屬性與方法。