.NET

2015-10-18 22 views
5

'da düzey ve işlev düzeyi kapsamını engellemek için bir performans etkisi var Bazı C# kodlarını inceliyordum ve kod bloğu içinde kapsam içine aldığım işlev düzeyinde kapsam dahilindeki bazı değişkenlere rastladım (buradaki bir döngü) Durum) Kullanıldığı yerler. Bana yakın olarak sadece o kadar temiz ve daha akılda kalıcı olduğunu ve bu da blok seviyesi kapsamını tercih etmek için yeterli sebep. Ama merak ediyordum, herhangi bir önemli performans etkisi var mı?.NET

+0

Twould döngü ve değişkenin boyutuna bağlıdır - çoğu durumda muhtemelen fark göstermedi –

+0

ilgili http://programmers.stackexchange.com/questions/113262/why-declare-variables-close-to-where-they-are-used – Rotem

+0

@AlexKrups Öyle mi? Derleyicinin deklarasyonu her iki şekilde de döngüden çıkaracağını hayal ediyorum. – Rotem

cevap

8

Hiç bir performans farkı yok.

Değişken kapsamı, değişken ömürden farklıdır. Değişken, işlev kapsamı içinde veya işlevdeki bir kod bloğunda bildirilmiş olsun, işlev için yığın çerçevesinde oluşturulur. Değişken, tüm işlev yürütme sırasında bulunur, yalnızca kapsamına bağlı olarak değişkene erişimi sınırlayan derleyici.

(yani farklı kurallar değişken aslında yerine normal bir yerel değişkenin bir kapağın bir parçası olup olmadığını geçerlidir olsa unutmayın.)

+0

Ve elbette JITter, bir çakıştırmayı veya yığının parçasını, çakışan olmayan canlı zamanlarla çoklu değişkenler için yeniden kullanmakta serbesttir. – CodesInChaos

+0

Bu, düşündüğüm çizgilere rağmen, belki de kapsam belirlemedeki farkın çöp toplama işlemini etkileyebileceğini düşünmüştüm. –

+0

@MatthewNichols: Aslında çöp toplama işlemini etkilemez (hata ayıklama modu dışında). Çöp toplayıcı sadece referansta kullanılan kodun nerede olduğuyla ilgilenir, değişkenin kapsamı ve ömrü alakasızdır. – Guffa