C# 'de performans açısından kritik bir uygulama yazıyorum ve temel işlem ağırlık hesaplamalarıdır. tüm değişkenler erişilebilir, böylece tüm aramalar aynı sınıf içinde yapılırC# bu işlevleri inline edecek mi?
if (activationMethod == ActivationMethod.Binary) {
ForEachWeight((lower, upper, weight) => upperLayer.Values[upper] += weight;
} else {
ForEachWeight((lower, upper, weight) => upperLayer.Values[upper] += lowerLayer.Values[lower] * weight);
}
:
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]);
}
}
}
Ve gibi çeşitli basit fonksiyonları ile yerlerde onlarca çağrılan: işlev şöyle . Bu fonksiyon çağrılarını C# yapabilir mi? Yukarıdaki çağrılar böyle bir şey için satır içine yerleştirilmiş örneğin düşünüyorum:
buna onlarca Bence ekstra fonksiyon çağrıları binlerce anlamı yoksaif (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);
}
}
}
büyük havai vardır. Bu% 10'luk bir hız artışı sağlarsa, buna kesinlikle değer. Çok fazla kodu yeniden yazmam gerektiğinden, karşılaştırma için el ile kolayca karşılaştırma yaparak kıyaslayamıyorum.
Bu yüzden sorum şu CAN C# bu çağrılarda mı? Ve eğer öyleyse, IN satırlı olduklarını nasıl öğrenebilirim?
bu [cevap] Bkz (http://stackoverflow.com/a/8746128/1991068). –
Bu işlevin satır içi çok fazla almaz. Sadece pratik olarak hiçbir şey yapmayan işlevler için ödeme yapar. –
Delegeleri kullandığınız gerçeği onu oldukça olası kılar. – leppie