c# - 在子 block 内声明变量会提高性能吗?

标签 c# scope variable-declaration

在 C# 中,比较以下三个 备选方案时,性能会有任何差异吗?

一个

void ONE(int x) {

if (x == 10) 
{
    int y = 20;
    int z = 30;
    // do other stuff
} else {
    // do other stuff
}
}

两个

void TWO(int x) {

int y;
int z;

if (x == 10) 
{
    y = 20;
    z = 30;
    // do other stuff
} else {
    // do other stuff
}
}

三个

void THREE(int x) {

int y = 20;
int z = 30;

if (x == 10) 
{
    // do other stuff
} else {
    // do other stuff
}
}

最佳答案

所有其他条件都相同(但它们通常不相同,这就是为什么您通常必须实际测试它的原因),ONE()TWO( ) 应该生成相同的 IL 指令,因为局部变量最终作用于整个方法。如果 x==10THREE() 的速度将可忽略不计,因为其他两个不会费心将值存储在局部变量中。

这三个变量占用相同数量的内存——即使没有存储任何内容,也会为所有变量分配内存。不过,如果 JIT 编译器查找未使用的变量,它可能会在此处执行优化。

关于c# - 在子 block 内声明变量会提高性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3402320/

相关文章:

python - 从类定义中的列表理解访问类变量

javascript - jQuery:如何使用文字对象方法中的方法获取全局变量

c - 在 C 函数中声明外部变量?

c++ - 有没有办法在 for 循环初始值设定项中定义两种不同类型的变量?

c# - 有没有办法在 C# 应用程序中保持电子邮件 session ?

c# - Fluent nHibernate 自动映射属性为 nvarchar(max)

javascript - 如何在它自己的方法调用中引用 jQuery 对象?

if-statement - 是否可以在Rust中使用if表达式的条件来声明变量?

c# - XPath:根据另一个节点选择一个节点?

c# - 简单的正则表达式在 c# 中不起作用