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

C#:哪个更快,多少,为什么?,c#,.net,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(strin

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

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是更好,还是使用
GetValueByKey
int.Parse()
在调用该方法时使用它更好?

GetValueByKeyInt
从定义上讲会更慢准确地说慢多少取决于很多因素。您正在运行框架的哪个版本?32位还是64位?哪种紧张?什么操作系统?什么处理器?等等

基本上,
GetValueByKeyInt
做了更多的工作(它调用int.Parse,而其他代码不调用,否则它们是相同的),因此它的速度必须较慢。另外,当TryGetValue返回false时,int.Parse将抛出一个异常(这是一个相当大的性能损失)。您可能想改用
TryParse


但老实说,您应该进行基准测试,看看它是否对您的环境有影响。这在很大程度上取决于您想要的是int还是字符串。如果你想要一个int,
GetValueByKeyInt
会慢一些,但是它会给你想要的东西(这更重要)。

如果你先返回,然后解析,或者在返回之前解析,这没什么大不了的。你知道“过早优化是万恶之源”这句话吗?这个问题是一个很好的例子。这是系统中需要“快速”的性能关键部分吗?如果不是,那么调用此方法的客户机的使用注意事项才是重要的-调用者接收回int是否更方便?如果是这样,则返回一个int。始终使用探查器来确定某个对象的运行速度,更重要的是,在哪里(如果有)存在性能瓶颈。除此之外,请查看(OT)注意,如果找不到键,GetValueByKeyInt将崩溃(然后值为null)