我想知道C#中的以下情况。
有时函数名称可能很长,而且冗长。我在工作中使用微软的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怎么样?
答案 0 :(得分:4)
由这些产生的IL将是等效的。如果你想向自己证明这一点,请尝试编译两者并用Ildasm查看生成的IL http://msdn.microsoft.com/en-us/library/f7dy01k1(v=vs.80).aspx
答案 1 :(得分:3)
临时变量很好。
调试时,可以查看功能结果。
如果存在延迟,则延迟为纳秒或微秒。
维护是王道。