Передайте аргумент методу через вызов другого метода. Есть ли разница в производительности? - PullRequest
0 голосов
/ 26 февраля 2020

Например, я могу написать следующий код

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 подобных методов. Какое из написаний предпочтительнее для лучшей производительности? Во втором случае, в конце концов, результат также сохраняется для передачи. Но без явного создания переменной, как в первом случае.

Может быть, речь идет только о читабельности? И в одном случае удобно написать одну строку, в другом - объявить локальную переменную.

1 Ответ

1 голос
/ 26 февраля 2020

Второй подход будет медленнее в случае исключения, потому что он вызывает ConvertToKey дважды. Учитывая, что вы уже находитесь в ситуации «ой, я выбрасываю исключение», это вряд ли будет значительным.

Кроме этого, они должны иметь одинаковое время выполнения. Я бы определенно остановился на удобочитаемости.

...