【问题标题】:Is a C# static method's variable initialised every time the method is called? [duplicate]每次调用方法时是否初始化 C# 静态方法的变量? [复制]
【发布时间】:2017-01-25 12:54:40
【问题描述】:

在下面的例子中,是每次调用静态 Flog.Log() 函数时都会创建一个新的 StringBuilder(255),还是只会在第一次调用该方法时创建?

public class Flog {

    public static void Log(FlogType flogType, string msg, params System.Object[] p) {

        StringBuilder sb = new StringBuilder(255);
        sb.Length = 0;
        sb.AppendFormat(msg, p);
        Log(flogType, sb.ToString());
    }
}

我意识到我可以使用静态成员变量来解决这个问题。

编辑:问题的目的是优化之一——在某些语言中,StringBuilder sb 变量的初始化只会发生一次。

【问题讨论】:

  • 每次,因为方法是静态的,而不是变量,它们将超出范围并被标记为垃圾回收
  • 我认为这不应该被关闭,因为这个问题更多地与编译器优化 IMO 相关。

标签: c# static-methods


【解决方案1】:

每次静态时都会创建一个新的 StringBuilder(255) Flog.Log() 函数被调用,还是只创建第一个 调用该方法的时间?

每次调用名为Log 的静态方法时都会创建它。

只有static 类的成员被创建一次。因此,如果 sb 是该类的静态字段,则 StringBuilder 将只创建一次。

【讨论】:

    【解决方案2】:

    据此post

    C# 不支持静态局部变量(在方法范围内声明的变量)。

    【讨论】:

      猜你喜欢
      • 2012-05-25
      • 2016-03-05
      • 2011-04-24
      • 2016-07-27
      • 1970-01-01
      • 1970-01-01
      • 2021-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多