c# 内联函数参数和临时变量

标签 c# argument-passing

我想知道 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/

相关文章:

c - C中没有类型的参数

c# - 如何加载静态字段?

c# - 多表单、单 View 、ViewModel for MVC Core 2.0

c# - 在 Entity Framework 中映射选择存储过程

c - C中数组参数有什么区别

javascript - 将参数传递给作为参数传递给 jQuery 函数的函数

c# - .net 桌面应用程序 - 如何存储/更改应用程序设置或连接字符串?

c# - Azure WebApp 未启动 : An error occurred while starting the application. 加载配置文件失败

bash - 如何将带空格的参数从 bash 脚本传递到 bash 脚本?

javascript - 简单的 JavaScript 对象比较