【问题标题】:Pass an argument to a method via a call to another method. Is there a performance difference?通过调用另一个方法将参数传递给方法。有性能差异吗?
【发布时间】:2020-02-26 13:39:57
【问题描述】:

例如我可以写下一段代码

var key = ConvertToKey<TViewModel>();
var page = typeof(TView);
_ = _pages.TryAdd(key, page)
    ? true
    : throw new InvalidOperationException($"ViewModel already registered '{key}'");

或者像这样

_ = _pages.TryAdd(ConvertToKey<TViewModel>(), typeof(TView))
    ? true
    : throw new InvalidOperationException($"ViewModel already registered '{ConvertToKey<TViewModel>()}'");

我对运行时方面的区别感兴趣。从上面的例子中抽象出来,它的返回类型很简单。让我们假设有 100 或 1000 个类似的方法。哪个拼写更可取以获得更好的性能?毕竟在第二种情况下,结果也被保存下来以供传递。但没有像第一种情况那样显式创建变量。

也许这只是关于可读性?而且在一种情况下写一行很方便,在另一种情况下声明一个局部变量。

【问题讨论】:

    标签: c# performance methods memory-management


    【解决方案1】:

    第二种方法在异常情况下会慢一些,因为它调用了两次ConvertToKey。鉴于您已经处于“哎呀,我抛出异常”的情况,这不太可能是重要的。

    除此之外,它们应该具有相同的执行时间。我肯定会在这里关注可读性。

    【讨论】:

    • I would definitely focus on readability你说的是这个案子吗?或者一般来说,关于写作之间的选择。
    • @Viewed:好吧,在这种情况下,当然 - 但一般来说,我总是会编写最易读的代码,直到我有证据性能差异。
    猜你喜欢
    • 2016-12-21
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多