我有一个实现接口(interface)的项目列表。对于这个问题,让我们使用这个示例界面:
interface Person
{
void AgeAYear();
}
有两个类
class NormalPerson : Person
{
int age = 0;
void AgeAYear()
{
age++;
//do some more stuff...
}
}
class ImmortalPerson : Person
{
void AgeAYear()
{
//do nothing...
}
}
由于其他原因,我需要他们两个列表。但是对于这个调用,当我循环遍历我的 Person
列表时,我可能会调用空函数。 这会对性能产生影响吗?如果是,有多少?是否会出于所有意图和目的优化空函数?
注意:在实际示例中,ImmortalPerson
有其他确实有代码的方法 - 它不仅仅是一个什么都不做的对象。
最佳答案
Will this have a performance impact?
极不可能产生有意义的性能影响。
If so, how much?
您可以使用分析器针对您的特定代码路径精确对其进行量化。我们不能,因为我们不知道代码路径。我们可以猜测,并几乎可以肯定地告诉您这无关紧要,因为这极不可能成为您应用程序中的瓶颈(您真的坐在那里在一个紧密的循环中调用 Person.AgeAYear
吗?)。
只有您可以通过分析仪和测量来精确找出答案。
Will the empty function, for all intents and purposes, be optimized out?
这当然是可能的,但也可能不是;它甚至可能在 JITter 的 future 版本中发生变化,或者在平台之间发生变化(不同的平台有不同的 JITter)。如果您真的想知道,请编译您的应用程序,然后查看反汇编的 JIT 代码(不是 IL!)。
但我要说的是:这几乎可以肯定,几乎绝对不值得担心或投入任何时间。除非您在性能关键代码的紧密循环中调用 Person.AgeAYear
,否则它不是应用程序的瓶颈。您可以花时间在这上面,也可以花时间改进您的应用程序。您的时间也有机会成本。
关于c# - 调用空函数需要多长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7191526/