我应该使用嵌套块来提高性能

Dan*_*l86 0 .net stack

我一直在学习堆栈和堆,特别是堆栈和它的LIFO方法.

这是否适用于方法中的嵌套块,并且可以用于提高性能,例如

public void Test() {
    int i = 5;
    // do something with i

    int j = 5;
    // do something with j
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,仅在方法结束时,i和j将从堆栈中释放.

以下会更有效吗?(我知道它的一个简单的程序.....)或者释放的努力是否会更多地节省堆栈的大小?

public void Test() {
    {
        int i = 5;
        // do something with i
    }
    {
        int j = 5;
        // do something with j
    }
}
Run Code Online (Sandbox Code Playgroud)

这仅仅是为了示例目的,我知道我可以重构这个等等.我只对方法中的内存发生了什么感兴趣....

Jon*_*eet 5

无论如何,堆栈被分配给整个方法调用.

这里其中添加额外的模块可以帮助一些微妙的情况下,在拍摄的变量而言-如果你有两个lambda表达式,其中一个捕获i和捕获一个j,然后在第一种情况下,你会最终合成类捕获两个变量,而在第二种情况下,您最终会得到两个类...至少在当前实现中.

如果没有变量捕获,JIT 至少可能会注意到您一次只使用一个变量,并优化为两者重用相同的堆栈空间.

像这样的微优化对性能产生重大影响是非常罕见的,但它们可能会产生非常显着的可读性影响...所以我只会在以下情况下开始使代码不易读取:

  • 您已经进行了强大的性能测试
  • 你有一个具体的性能目标(所以你知道什么时候完成)
  • 你已经缩小了瓶颈所在的范围
  • 您已经证明可读性的降低可以显着提升性能