| 層級 | 信任度 | 能力 | 範例 |
| 透明代碼 | 最低 | 無法提權、無法存取敏感資源;僅能呼叫透明或 SafeCritical 代碼 | **所有 Silverlight 應用程式代碼** |
| SafeCritical 代碼 | 中間 | 橋樑層:驗證/清理輸入 → 呼叫關鍵代碼 → 清理輸出保護系統 | BCL 內部封裝 P/Invoke 的封送方法 |
| 關鍵代碼 | 最高 | 可 P/Invoke、含不可驗證 IL、直接操作系統資源 | **僅限 Silverlight 平台組件** (coreclr.dll、系統庫) |
規則:
- 透明 → 透明 / SafeCritical ✓
- 透明 → 關鍵 ✗
- SafeCritical → 關鍵 ✓ (代表透明代碼)
- 關鍵 → 任意 ✓
**優勢**:絕大多數應用代碼為透明,安全審核聚焦於極小關鍵面;DLR (動態語言運行時) 完全以透明代碼編寫。
BCL 精簡策略:刪除重複、依賴作業系統
1. 泛型取代非泛型集合
.NET 2.0 引入泛型後,List<T> 等提供型別安全、避免裝箱、效能更優。Silverlight BCL **移除 ArrayList、Hashtable 等非泛型集合**,統一泛型 API。
2. 全球化資料外移至作業系統
桌面 CLR 內建龐大文化特性資料表 (隨時間過期、Windows 中心)。CoreCLR **不內建資料**,CultureInfo 委託宿主 OS (Windows / Mac OS X) 提供全球化行為,應用在 Mac 上像 Mac、在 Windows 上像 Windows。
3. 獨立儲存:沙箱應用的虛擬檔案系統
源自 .NET 1.0,Silverlight 發揚光大:
using (var isoStore = IsolatedStorageFile.GetUserStoreForApplication())
using (var writer = new StreamWriter(isoStore.CreateFile("data.txt")))
{
writer.Write("跨會話持久化狀態");
}
- 支援目錄/檔案建立、讀寫、刪除
- 配額預設 1 MB/應用程式組 (以網域劃分,如 *.microsoft.com 共享)
- 用戶可透過 Silverlight 設定對話框擴充配額、刪除儲存
- 不適合高價值機密 (密碼),但存放位置隱蔽、僅擁有者可存取
4. UI 線程與 Dispatcher
單一 UI 線程模型,Dispatcher 處理跨線程 UI 更新:
MyListBox.Dispatcher.BeginInvoke(() => MyListBox.ItemsSource = MyItems);
建議使用 BackgroundWorker 封裝背景運算與 UI 更新,保留低階線程 API 相容。
跨平台抽象層 (PAL):CoreCLR 運行於 Mac OS X 的關鍵

圖 2:平台適配層架構
- PAL 實作 CoreCLR 所需的 Win32 API 子集:錯誤處理、檔案 I/O、網路、線程語義、異常處理...
- **不實作** Registry、GDI+、COM 等 Silverlight 不需功能
- Mac OS X 基於 Mach 微核心 + BSD,異常處理 (Objective-C) 與 C++ 不相容;無 I/O 完成埠;路徑分隔符差異...
- 受惠於 SSCLI (Rotor) 經驗,針對 Intel Mac 專用實現,體積小、效能高
平台支援矩陣
| 平台 | 運行時 | 備註 |
| Windows (x86/x64) | CoreCLR | 完整功能 |
| Mac OS X (Intel) | CoreCLR | 同 Windows 位元組碼,PAL 適配 |
| Linux | Moonlight (Mono) | Novell 合作,非 Microsoft 官方 |
| Windows Mobile / Symbian | .NET Compact Framework | 記憶體佔用更低 |
總結與展望
- CoreCLR 證明:.NET 可精簡至 4 MB 級別仍保持豐富程式模型
- 安全透明模型大幅降低攻擊面,將成未來桌面 CLR 安全架構基石
- 同進程並行技術打破單進程單 CLR 限制,啟用嵌入式托管場景
- PAL 架構展示跨平台托管運行時的工程化路徑
- CoreCLR 設計決策 (精簡 BCL、移除 CAS、泛型優先) 將持續影響 .NET 生態演進
Silverlight 2 讓 Web 開發擁有桌面級生產力,CoreCLR 是其背後的工程傑作。
- 上一篇文章: CLR 效能工程實戰 (一):及早測量、頻繁測量——MeasureIt 微基準工具詳解
- 下一篇文章: COM 呼叫 WCF 服務實戰 (四):服務專用字串與設定檔突破 64K 訊息限制
Copyright ©
程式碼之家 All Rights Reserved