第一章:C# 委托优化教程
委托是 C# 中实现松耦合、事件驱动和函数式编程的关键机制,但不当使用可能导致性能开销、内存泄漏或 GC 压力上升。本章聚焦于生产环境中可落地的委托优化策略,涵盖编译期绑定、缓存复用、避免装箱及异步委托调用等核心实践。
优先使用静态方法委托
静态方法委托无需捕获实例(this),避免闭包对象分配,显著降低 GC 压力。对比以下两种写法:
// ❌ 实例方法委托:每次创建新委托实例,隐式捕获 this
var handler = new Action(instance.DoWork);
// ✅ 静态方法委托:编译期单例,零分配
var handler = new Action(StaticHelper.DoWork);
缓存委托实例而非重复创建
在循环或高频调用路径中,应复用委托实例。尤其在 LINQ 查询、事件订阅或回调注册场景下:
- 使用
static readonly 字段缓存常用委托 - 避免在 foreach 或 for 循环内 new 委托
- 对泛型委托(如
Func<T>)按类型缓存
避免装箱引发的委托开销
值类型参数传入非泛型委托(如
Action<object>)将触发装箱。应优先选用泛型委托:
// ❌ 装箱风险:int 被装箱为 object
Action