C#:哪个更快,多少,为什么?

时间:2017-06-15 07:50:43

标签: c# .net

我的很多类中都有一个方法,通常只返回列表或字典中的字符串。看看下面的例子......

public string GetValueByKey(string key)
{
    if (!_configItems.TryGetValue(key, out string value))
    {
        Logger.Warn($"Key not found: {key}");
    }

    return value;
}

public int GetValueByKeyInt(string key)
{
    if (!_configItems.TryGetValue(key, out string value))
    {
        Logger.Warn($"Key not found: {key}");
    }

    return int.Parse(value);
}

我想知道的是,使用GetValueByKeyInt会更好吗?或者在调用方法的地方使用GetValueByKeyint.Parse()会更好吗?

1 个答案:

答案 0 :(得分:0)

根据定义,

GetValueByKeyInt会变慢。 完全慢多少取决于很多事情。你在运行什么版本的框架? 32位还是64位?哪个JITer?什么OS?什么处理器?等等

从根本上说,GetValueByKeyInt做了更多工作(它调用int.Parse而其他代码没有 - 否则它们是相同的) - 因此它必须更慢。此外,当TryGetValue返回false时,int.Parse将抛出一个异常(这是一个非常大的性能命中)。 您可能希望改为使用TryParse

但老实说,你应该根据你的背景来确定它是否重要。它在很大程度上取决于你想要的是一个int还是一个字符串。如果你想要一个int,GetValueByKeyInt会更慢 - 但它会给你你想要的东西(更重要的是)。