.NET Framework 4 (配合 VS 2010) 帶來架構級升級,本文依官方文件架構,系統化解析九大核心領域新特性與改進,附代碼範例與遷移建議。
// 啟用監控
AppDomain.MonitoringIsEnabled = true;
// 取得特定 AppDomain CPU/記憶體統計
var ad = AppDomain.CreateDomain("Child");
var cpu = ad.MonitoringTotalProcessorTime;
var mem = ad.MonitoringSurvivedMemorySize;
HandleProcessCorruptedStateExceptionsAttribute 允許 Managed 碼捕獲嚴重錯誤 (AccessViolation 等)。
using System.Diagnostics.Contracts;
public void Transfer(Account from, Account to, decimal amount)
{
Contract.Requires(from != null);
Contract.Requires(to != null);
Contract.Requires(amount > 0);
Contract.Requires(from.Balance >= amount);
Contract.Ensures(from.Balance == Contract.OldValue(from.Balance) - amount);
Contract.Ensures(to.Balance == Contract.OldValue(to.Balance) + amount);
// ... 實作
}
dynamic 關鍵字與 COM 互操作無縫配合。System.Dynamic 命名空間:DynamicObject、ExpandoObject、InvokeMemberBinder 等。dynamic 共享 DLR 基礎設施。LoopExpression、TryExpression (供 DLR 使用,非 LINQ)。
IEnumerable strings = new List();
IEnumerable
IEnumerable<out T>、IComparer<in T>、Func<in T, out TResult> 等介面/委派支援。
using System.Numerics;
BigInteger big = BigInteger.Pow(2, 10000); // 任意精度整數
Complex c = new Complex(3, 4); // 複數
var magnitude = Complex.Abs(c); // 5
var phase = Complex.Angle(c); // 0.927 rad
var t1 = Tuple.Create(1, "Hello", 3.14); // 1-8 元素
var t2 = new Tuple>(1, "a", 2.0, true, 'c', 3, 4L, Tuple.Create(5,6)); // 9+ 元素巢狀
DirectoryInfo.EnumerateFiles()、EnumerateDirectories()、**延遲串流式列舉**,避免大目錄 GetFiles() 記憶體暴漲。
using (var mmf = MemoryMappedFile.CreateFromFile("huge.dat", FileMode.Open))
using (var accessor = mmf.CreateViewAccessor())
{
accessor.Write(0, 12345); // 隨機存取超大檔案
// 進程間共享記憶體:CreateOrOpen("Global\\MySharedMemory")
}
bool is64BitOS = Environment.Is64BitOperatingSystem;
bool is64BitProc = Environment.Is64BitProcess;
using (var key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
{ /* 讀 64-bit 註冊表視圖 */ }
TimeSpan 完整支援自訂格式化/解析 (ToString, ParseExact 等多載)String.IsNullOrWhiteSpace、String.Concat/Join(IEnumerable<T>) 多載StringBuilder.Clear、Stopwatch.Restart 便利方法Enum.HasFlag、Enum.TryParseStream.CopyTo (Stream 間高效複製)Path.Combine 多參數多載IObservable<T>/IObserver<T> (Reactive Extensions 基礎)IntPtr/UIntPtr 運算子多載 (+, -)Lazy<T> 通用延遲初始化包裝器SortedSet<T> (自我平衡 BST,實作 ISet<T>)DeflateStream/GZipStream 算法改進,移除 4GB 上限Monitor.Enter(obj, ref bool lockTaken) 安全鎖取得模式Thread.Yield 讓出時間片Guid.TryParse/TryParseExactRegistryOptions.Volatile (重開機自動清除)
[Export(typeof(IPlugin))]
public class MyPlugin : IPlugin { ... }
[ImportMany]
public IEnumerable Plugins { get; set; }
var catalog = new DirectoryCatalog(@".\Plugins");
var container = new CompositionContainer(catalog);
container.ComposeParts(this); // 自動發現、建構、注入
System.ComponentModel.Composition 命名空間System.Threading.Tasks.Task、Parallel.For/ForEach、TaskFactory、Continuation。source.AsParallel().Where(...).Select(...),聲明式平行查詢,自動分割、排程、合併。ConcurrentDictionary、BlockingCollection、ConcurrentQueue/Stack/Bag。Partitioner 自訂工作分配策略。HttpWebRequest 計數器)。HttpWebRequest 64-bit Range 標頭、自訂 Host 標頭、更多標頭控制。SmtpClient SSL 支援、MailMessage 標頭增強。NetworkCredential 密碼可用 SecureString。UriSection 設定)。DataGrid、Calendar、DatePicker 內建。wsHttpContextBinding、ETW 追蹤、標準端點。Activity/NativeActivity 模型、持久化/追蹤/交易整合。Send/Receive 活動、工作流服務裝載、相關性管理。.NET 4 引入 **新安全透明度模型** (Level 2),部分信任程式碼行為變更。詳細請參閱 .NET Framework 4 安全性變更。
.NET 4 非單一功能釋出,而是 **運行時、基礎類庫、語言、工具、框架** 全棧升級:**TPL/PLINQ 解決多核利用**、**DLR/dynamic 打通動靜態**、**MEF 標準化擴充**、**Background GC/NoPIA/In-Process SxS 強化部署**、**WF/WCF 4 重塑工作流與服務**。升級專案時建議:目標框架設為 4.0 → 啟用 Code Analysis → 逐步採用 TPL/MEF/POCO → 驗證安全透明度相容性**。