【问题标题】:Static class variable vs function variable. Is one more efficient?静态类变量与函数变量。一个更有效率吗?
【发布时间】:2018-09-04 20:15:46
【问题描述】:

我对效率有点着迷,但我一直无法找到这个问题的明确答案。其中一种是否比另一种更有效/更好,如果是,为什么?

非静态函数中使用的静态类变量:

public class Example {
    private static int index;

    private void Test() {
        index = 0;
    }
}

函数内部声明的变量:

public class Example {
    private void Test() {
        int index = 0;
    }
}

index 变量将仅由 Test() 函数使用。

运行时速度比内存使用更重要。如果答案因语言而异,那么我特意询问的是 C#。

提前谢谢你:-)

【问题讨论】:

  • 你可能有两种不同的行为。您正在将苹果与橙子进行比较。但是,如果 Test() 是唯一要使用 index 的方法,请在该方法中创建变量。
  • 这不是一个效率问题——它是一个正确性问题。他们做非常不同的事情
  • 因为你的两个类实际上都没有做任何事情;将它们都删除会更有效。
  • 当代码使用函数中声明的变量运行时,每次调用函数时程序是否需要分配内存?与分配一次的静态类级变量相比。
  • 我建议你做一些实际的基准测试。你读过ericlippert.com/2012/12/17/performance-rant吗?

标签: c# performance processing-efficiency coding-efficiency


【解决方案1】:

我认为在性能上不会有任何差异,除了你会在实例变量中分配更多内存时会给垃圾收集器带来一些额外的负担。

如果您正在考虑执行多线程并且性能很重要,请使用实例变量,而不是静态变量。

然而,你确实激发了我的兴趣,我编写了一个简单的程序来进行测试。静态和实例变量的 100 万次分配的结果花费了 3 毫秒。我在同一运行时运行了 5 次测试,下面是

静态测试耗时 3 毫秒。 实例测试耗时 3 毫秒。 静态测试耗时 3 毫秒。 实例测试耗时 3 毫秒。 静态测试耗时 3 毫秒。 实例测试耗时 3 毫秒。 静态测试耗时 3 毫秒。 实例测试耗时 3 毫秒。 静态测试耗时 3 毫秒。 实例测试耗时 3 毫秒。

我已将代码上传到我的github repository,特别是Program.cs file

【讨论】:

    【解决方案2】:

    在执行时间或内存消耗的速度增加方面基本上没有论文,就像你比较苹果和橙子,它们是不同的,但都是水果。

    您的两个示例之间的唯一区别是 static 关键字,它避免了实例化的需要,但是这不会影响性能或优化代码

    这样做的唯一目的是修改访问index 变量的方式

    【讨论】:

      猜你喜欢
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 2016-11-16
      • 1970-01-01
      • 2015-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多