ObjectDataSource 內建快取支援,透過屬性設定即可啟用,無需寫代碼。本文詳細說明時間基礎與相依性基礎兩大策略、關鍵屬性、啟用條件與最佳實務。
| 策略 | 機制 | 適用情境 |
|---|---|---|
| Time-based (時間基礎) | 固定/滑動過期時間 | 資料異動可接受延遲、查詢成本高 |
| Dependency-based (相依性基礎) | 檔案/快取項目/SQL Cache Dependency 異動觸發失效 | 需資料即時一致性、資料庫支援通知/輪詢 |
EnableCaching="true":啟用快取。CacheDuration="60":快取秒數 (0 表示永不過期)。CacheExpirationPolicy="Absolute|Sliding":絕對/滑動過期。SqlCacheDependency="Northwind:Products":SQL Cache Dependency 字串 (格式:連接字串名稱:資料表名稱)。SelectMethod 回傳型別必須可序列化 (DataSet, DataTable, List[Serializable])。DataSourceMode="DataSet" (預設) 或 DataReader (需可序列化包裝)。// ObjectDataSource 內部簡化邏輯
object cached = HttpRuntime.Cache[cacheKey];
if (cached != null) return cached;
object data = SelectMethod();
HttpRuntime.Cache.Insert(cacheKey, data, dependency,
absoluteExpiration, slidingExpiration);
return data;
CacheDuration="0" (無絕對過期) + SqlCacheDependency 或啟動載入。CacheDuration="300" (5 分鐘) + SlidingExpiration。ObjectDataSource 快取屬性提供零代碼快取能力,但策略耦合於表現層。理解時間/相依性策略差異、啟用條件與序列化需求,能避免常見誤用 (如高頻異動資料仍設長過期)。