我正在用C#编写一个性能关键型应用程序,核心操作是权重计算.该函数如下所示:
public void ForEachWeight(Action<int,int,float> action) { for (int lower = 0; lower < LowerLayerSize; lower++) { for (int upper = 0; upper < UpperLayerSize; upper++) { action(lower,upper,Weights[(lower * UpperLayerSize) + upper]); } } }
if (activationMethod == ActivationMethod.Binary) { ForEachWeight((lower,weight) => upperLayer.Values[upper] += weight; } else { ForEachWeight((lower,weight) => upperLayer.Values[upper] += lowerLayer.Values[lower] * weight); }
所有调用都在同一个类中完成,因此所有变量都可以访问. C#可以内联这些函数调用吗?我在想,例如上面的调用可以内联到这样的东西:
if (activationMethod == ActivationMethod.Binary) { for (int lower = 0; lower < LowerLayerSize; lower++) { for (int upper = 0; upper < UpperLayerSize; upper++) { upperLayer.Values[upper] += weight; } } } else { for (int lower = 0; lower < LowerLayerSize; lower++) { for (int upper = 0; upper < UpperLayerSize; upper++) { upperLayer.Values[upper] += lowerLayer.Values[lower] * weight); } } }
如果不是,那就意味着成千上万的额外函数调用,我认为这是一个巨大的开销.如果这甚至可以提高10%的速度,那么它是完全值得的.我不能通过手动内联它们进行比较来轻松进行比较,因为我必须重写大量代码.
所以我的问题是CAN C#内联这些调用?如果是这样,我怎么能知道他们是否被内联?