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

C#是否缓存类成员计算结果?两种实现性能是否等同?

C#类成员计算结果的缓存行为及两种Area实现的性能差异
  • C#不会自动缓存类成员的计算结果,除非你手动实现缓存逻辑。比如你给出的第一种表达式体写法的Area属性,每次调用它的get访问器时,都会重新执行X * Y的计算——哪怕X和Y的值根本没变化。

  • 两种Area实现的性能完全不同:

    1. 第一种实现(表达式体属性):

      public double Area => X * Y;
      private double X { get; set; } = 5;
      private double Y { get; set; } = 5;
      

      每次访问Area都要读取X、Y的当前值,再执行乘法运算。如果频繁访问Area但X/Y很少变动,会产生不必要的重复计算开销。不过好处是X/Y被修改后,Area能自动返回最新的计算结果。

    2. 第二种实现(构造函数初始化的只读属性):

      public double Area { get; }
      
      public Rectangle(double x = 5, double y = 5)
      {
         Area = x * y;   
      }
      

      Area的值只在类实例化时计算一次,之后每次访问直接返回预先存储好的值,没有额外计算开销,性能更优。但缺点是如果类内部后续修改了X/Y的值(虽然这里是private set,但存在修改可能),Area不会自动更新,始终保持构造时的结果。

  • 如果想要兼顾灵活性(X/Y修改后Area自动更新)和性能(避免重复计算),可以手动实现缓存逻辑:比如在X/Y的setter里更新缓存的Area值,或者用Lazy<T>来延迟计算并缓存结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:15:36