【发布时间】:2014-08-12 21:55:08
【问题描述】:
为了代码清晰,我有时会创建一个很明显应该内联的函数,无论是包装器,还是仅在单点调用的函数,或者应该经常调用的短函数,并且是 快。
在 C 中我会毫不犹豫地内联它,但在 Unity/C# 中没有办法做到这一点 AFAIK(this 似乎仅在 .NET 4.5 中可用)。
我是否可以相信编译器足够聪明,可以真正巧妙地内联,或者我最好有时为了性能牺牲代码清晰度,不信任编译器?
当然,这取决于具体情况,过早的优化是邪恶的,你应该分析而不是猜测。但是,对这个主题的总体概述可能仍可用作指导,以进行改进。
【问题讨论】:
-
“在 C 语言中,我会毫不犹豫地内联它”——尽管现代编译器可以忽略你的显式内联。那么与C#没有太大区别吗? :-)
-
@zerkms 你可以用宏内联它。我怀疑在这种情况下编译器会以某种方式取消内联它。
-
@Theodoros Chatzigiannakis:那时它不会是一个函数内联。我确定 op 的意思是使用
inline关键字。 -
@TheodorosChatzigiannakis 1. 宏很丑:我这样做是为了代码清晰,所以使用宏会破坏目的; 2. Unity 可能无论如何都不支持它们:它甚至不支持项目范围的定义,更不用说宏了!
-
@Lohoris 我指的是 C 中的宏(强制内联,AFAIK),而不是 C# 中的宏(不存在)。因此,这不是对您的问题的回应,而是对评论的回应。不幸的是,我不知道在 C# 中强制内联的任何方法。
标签: c# optimization unity3d inlining