You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# Expression Bodied方法返回新实例与缓存引用的性能差异

结论先行

你给出的表达式体写法每次调用GetList()时都会重新执行表达式、生成全新的List<Guid>实例,表达式体本身只是C#的语法糖,不会改变方法的执行逻辑,它和下面写全的普通方法行为100%等价:

private static List<Guid> GetList()
{
    return new List<Guid>()
    {
        new Guid("f93b8c93-3084-4087-8727-dad436fe5b76"),
        new Guid("6894046e-1deb-4128-b639-aa472f7f95d3")
        // many more 
    };
}

两种实现的核心差异

  • 性能与内存表现
    缓存静态字段的实现中,CacheList是静态只读字段,只会在所属类型第一次被加载时完成一次初始化,整个程序生命周期内仅存在这一个实例,每次调用GetList都只是返回同一个引用,没有额外的内存分配和元素初始化开销。
    而表达式体的实现每次调用都要分配新的List堆内存、初始化所有Guid元素填充到列表中,如果方法调用频率高、列表元素多,会产生大量不必要的GC压力,性能差距会非常明显。
  • 功能特性区别
    缓存实现返回的是同一个实例,外部拿到列表后如果执行Add/Remove/Clear等修改操作,会影响所有后续调用拿到的结果,如果不需要外部修改列表,建议将返回值改为IReadOnlyList<Guid>,或者返回CacheList.AsReadOnly()的只读包装避免被意外篡改。
    表达式体每次返回新实例的实现则没有这个问题,外部修改单个返回结果不会影响其他调用的返回值,如果业务上需要拿到独立可修改的列表,这种实现反而更符合需求。

内容的提问来源于stack exchange,提问作者user3724900

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 05:18:01