2016-03-26 32 views
0

Tuple paketini açmayı ve Tuple kullanarak sadece birkaç değişkeni kullanarak işlem yapmak daha hızlı mıdır?Açma Tuple veya olduğu gibi olsun?

Tuple<int,int> test = new Tuple<int,int>; 

int numberOne = int.Parse(Console.Readline()); 
int numberTwo = int.Parse(Console.Readline()); 

test.Item1 = numberOne; 
test.Item2 = numberTwo; 

for(int i = 0; i < 10; i++) 
{ 
    if(test.Item1 * i > test.Item2 * i) 
    {// do stuff} 
    else 
    {// do stuff} 
} 

VS

Tuple<int,int> test = new Tuple<int,int>; 

int numberOne = int.Parse(Console.Readline()); 
int numberTwo = int.Parse(Console.Readline()); 

test.Item1 = numberOne; 
test.Item2 = numberTwo; 

for(int i = 0; i < 1000; i ++) 
{ 
    int tempItem1 = test.Item1; 
    int tempItem2 = test.Item2; 

    if(tempItem1 * i > tempItem2 * i) 
    {// do stuff} 
    else 
    {// do stuff} 
} 

Ben de Tuple 2 ile değişkenleri unwrapping Öğe1 kullanarak daha hızlı ve olup olmadığını bilmek istiyorum item2:
Bu örneği ele alalım. Eğer 2'den fazla değişken kullanıyorsak sonuç hala aynı olacak mı?

Şimdiden teşekkürler

+6

Bu seviyedeki performans farkından endişe etmek tamamen anlamsızdır. Geri döndüğünüzde/bir sonraki kişiye ilettiğinizde anlaması en kolay olan kodu yazın. Performans sorunlarınız olduğunda, ölçümleri alın ve nasıl optimize edeceğinize karar verin. Yüzde doksan dokuz kez, beklediğiniz yerde olmayacak. "En hızlı olan" hakkında endişelenmeyi bırakın ve bunun yerine kodunuzun doğruluğu ve "anlaşılabilirliği" konusuna odaklanın. [Mikro-optimizasyon] üzerine yoğunlaşıyorsunuz (http://programmers.stackexchange.com/questions/99445/is-micro-optimisation-important-when-coding) ... – spender

+0

Ama yazdığım kodum bile değil. işte bu gerçekten önemli olduğunu merak ediyordum – KOPEUE

+0

IMO Tuples özellik isminde herhangi bir anlamı yakalama düşmanca olmayan bir veri türü, bu yüzden bir noktaya iyi bir isim ile yerel bir değişken oluşturarak kodunuza netlik katacak Tuple özelliği (örneğin, "var numberOfItems = someTuple.Item1;'). Ekstra yerel değişkenin maliyetinin, milyonlarca kez çağrılan kodun sıcak bir bölümünde olmadığı sürece, programınızı önemli ölçüde yavaşlatması son derece olası değildir. Programınız yavaş çalıştığında, maliyetin nerede olduğunu öğrenmek için profil kullanın. Bir kaç yerel değişken atayarak bahse girmeyeceğine bahse girerim – spender

cevap

0

yılında iki sürümü geçici değere bellekten tanımlama grubu öğelerini yükleyin. Tek fark, IL yürütme yığını veya gerçek bir IL yerel üzerinde geçici olup olmadığıdır. Normal olarak, bu JIT'in erişiminin içinde olmalıdır.

Eğer bu bir C derleyicisiyse, performansın aynı olduğundan% 100 emin olabilirsiniz. Bunun olmadığı bir durum, bir hata olur.

.NET JIT çok zayıf bir iyileştiriciye sahiptir, bu nedenle her zaman şanssız olabilir ve optimizasyon deliğine adım atabilirsiniz.

+0

Zayıf? .Net Jit Comiler/Runtime hakkında kötü olan nedir? –

+0

JIT, 100 milyonlarca .NET uygulama sunucusunun bunu çalıştırdığını düşündüğünüzde, çok gelişmiş bir iyileştirici değildir. Hotspot JVM çok daha karmaşıktır. – usr

+0

Temel olarak performans argümanınız, 100 milyonlarca uygulama sunucusunun bunu çalıştırmasıdır. JVM yorumunuza dayanarak, sadece bir Genetik Mantıksal Fallacy yaptığınızı ve herhangi bir somut örnek olmaksızın yanlış suçlamalar yaptığınızı düşündüğümüzü belirtmeliyim. –

İlgili konular