我想知道 C# 中的以下情况。
有时函数名可能会很长而且冗长。我正在为工作中的网站使用 Microsoft 的 MVC 3 框架,这是一个示例函数:
[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() 的栈帧中,并且生成的程序集比直接内联参数要慢一些(而不是将其临时存储)。
对于这种情况,C# 编译器是否更智能?如果没有相同的性能考虑,我可以随意使用临时的吗?
我知道预优化是邪恶的,我绝对不应该担心这种情况,但我对此很好奇。我什至不确定我会去哪里查找有关此的更多信息,因为标题是我描述问题的最佳方式。那么您如何看待 Stack Overflow?
最佳答案
这些产生的 IL 是等价的。如果您想向自己证明这一点,请尝试编译两者并使用 Ildasm 查看生成的 IL http://msdn.microsoft.com/en-us/library/f7dy01k1(v=vs.80).aspx
关于c# 内联函数参数和临时变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8735729/