繁体   English   中英

创建变量或调用方法几次 - 哪个更好?

[英]Create variable or call method few times - What's better?

我想知道几次创建新的变量或调用方法。 整体性能和GC清洁有什么好处? 看一看:

public static string GetValue(RegistryKey key, string value)
{
    if (key.GetValue(value) == null)
        return null;
    string newValue = key.GetValue(value).ToString();
    if (String.IsNullOrWhiteSpace(newValue))
        return null;
    return newValue.ToLower();
}

如何清除此代码?

通常,当您需要多次使用方法调用的结果时,应首先将其分配给局部变量。 局部变量只需要你的方法的堆栈帧大几个字节(对于64位的对象变量为8个字节),并且在方法返回时会自动清除 - 它对GC没有影响。

另一方面,重复的方法调用将需要再次执行其所有逻辑,从而导致所需堆栈帧的分配以及可能的对象实例化。 在您的情况下, RegistryKey.GetValue使情况更糟,因为它需要访问Windows注册表,使其比本地变量访问慢几个数量级。 此外,您可能面临两种调用返回不同值的竞争条件。

public static string GetValue(RegistryKey key, string name)
{
    object value = key.GetValue(name);
    if (value == null)
        return null;
    string valueStr = value.ToString()
    if (String.IsNullOrWhiteSpace(valueStr))
        return null;
    return valueStr.ToLower();
}

请注意,此问题将在C#6中得到很大程度的解决,您可以使用空条件运算符:

public static string GetValue(RegistryKey key, string name)
{
    string value = key.GetValue(name)?.ToString();
    if (String.IsNullOrWhiteSpace(value))
        return null;
    return value.ToLower();
}

创建一个局部变量并调用该方法一次。 本地方法调用(通常很小)开销。 如果您使用远程方法调用,差异将更加明显。

用? 如你所见,运算符使其更具可读性和更好的性能

public static string GetValue(RegistryKey key, string value)
{
    string valueStr=(string)key.GetValue(value);
    return string.IsNullOrWhiteSpace(valueStr)?null:valueStr.ToLower();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM