Мне было интересно узнать о следующей ситуации в C #.
Иногда имена функций могут быть довольно длинными и многословными.Я использую Microsoft MVC 3 Framework для веб-сайта на работе. Вот пример функции:
[ImportModelStateFromTempData]
[BreadCrumb("New Event")]
public ActionResult New()
{
var @event = _dbContext.EventRepository.CreateNewEvent();
return View("New",
EventViewModel.FromEventDomainModel(@event));
}
Этот код можно переписать без использования временных переменных @event, например:
[ImportModelStateFromTempData]
[BreadCrumb("New Event")]
public ActionResult New()
{
return View("New",
EventViewModel.FromEventDomainModel(_dbContext.EventRepository.CreateNewEvent()));
}
Первый пример, очевидно, более понятен, но с точки зрения чисто любопытства / с точки зрения производительности, либо быстрее, чем другой?Особенно с учетом того, что кэшированное значение @event используется только один раз.
В C ++ я помню, что обнаружил, что объявление локальной переменной @event (если бы это было C ++) будет храниться в стеке New ()frame, и сгенерированная сборка будет МЕДЛЕННО медленнее, чем прямая вставка аргумента (в отличие от временного хранения его).
Разумнее ли в этой ситуации компилятор C #?Могу ли я использовать временные без таких же соображений производительности?
Я понимаю, что предварительная оптимизация - это зло, и я абсолютно не должен беспокоиться об этом, но мне любопытно по этому поводу.Я даже не уверен в том, куда мне обратиться за дополнительной информацией, так как название было лучшим способом описать мой вопрос.Так что вы думаете, переполнение стека?