2011-11-08 25 views
5

Olası Yinelenen edin:
Why does one often see “null != variable” instead of “variable != null” in C#?halinde (değer == null) v (boş == değer)

bu bir merak soru daha arasındaki herhangi bir performans farkı yoktur Beyan.

if(value == null) 

ve

if(null == value) 

o fark edilebilir, ben (boş == değer) daha hızlı olsaydı oldukça sık ve hatırladığım birisi söyleyerek, ama gerçekten javascript C#, PHP & kullanılır?

Birazdan Terabytes bölgesinde büyük miktarda veriyi ayrıştıracak bir uygulama geliştirmeye başlayacağım, bu yüzden performans artışı milisaniye aralığında olsa bile bir etki yaratabilir. Herhangi bir fikri olan var mı?

+3

Ve performans özelliklerinin 3 farklı dilden fazlasını tutacağını düşünüyorsunuz? –

+1

Ben C# bir fark olduğunu sanmıyorum ama en kolay yolu sadece küçük bir kod yazmak ve ne olduğunu görmek –

+0

AFAIK, 'NULL' ile null veya diğer tanımlanmış değişkenler eşit olamaz ... neden NULL olduğunu Tanımsız. – Rahul

cevap

16

Her iki durumda da ölçülebilir bir performans avantajı olduğundan şüphe duyuyorum. Size bunun zor bir veri olmadığını söyleyen kişiye bahse girerim. Bildiğim olarak, bir tarihi eser, bu hatadan korunmak için C ve C++ bir tekniktir

: Eğer argümanları ters eğer

if (c = null) { 
} 

derleyici, bu alev alarak bunu yapamazsınız boşuna bir şey atamak.

3

Hiçbir farkın olmayacağını beklemek adil bir şeydir: bir fark varsa derleyici zaten en hızlı sürümü oluşturduğundan emin olabilirsiniz.

1

Böyle en iyi duruma getirme optimizasyonu size bir saat döngüsü kazandıracak (neden olsa bilmiyorum). Ancak büyük olasılıkla daha iyi olursa, derleyici bunu sizin için optimize edecektir.

Herhangi bir değişmezi (örneğin, null) eklemenin nedeni, == yerine = yaparsanız, değeri yanlışlıkla atayamazsınız. Şahsen onu daha az okunabilir buluyorum.

0

Daha hızlı veya değilse emin değilim ama bazı diller bunu yaparsanız böylece sizi uyarmadan bir eğer açıklamada atamak için izin:

if (value = null) yanlışlıkla size değişkeni siler miydin başka bir şekilde oysa etrafında yürütme yolunda daha da garip sorunlar olmazdı.

4

Beklenilmesi gereken kesinlikle bir performans farkı yoktur.

(çirkin) formu (if null == value) kullanılan tek nedeni bir C kaçınmaktır/C++ belirli yazım hatası:

if (value = null) // compiles but _assigns_ null to value and always returns false 
    ... // never executed 
0

Evet ben de fark olacağını düşünüyorum, ama şahsen ben if(value == null)

3
tercih

Her iki 100 milyondan fazla yineleme profili oluşturdum.

halinde (değer == null)
- 6,85175704956 saniye (68.5 nano saniye her biri)
halinde (boş == değer)
- 6,75543808937 saniye (67.5 nano saniye her biri)

Yani, 1 nanosaniyelik bir kazanç yeterli ise size kalmış.

+8

Testleriniz, gerçek bir yardımdan daha çok zararlıdır. Böyle bir testin her şeyi kanıtlayabildiğini varsaydınız, ki bu açıkça yanlıştır: Birincisi, bir sebep olmadan profil testlerini yapmak hiç mantıklı değildir. Amatör kullanıcılar arasında başka bir yanılsama yaratacak ve başka bir şey olmayacak. İkincisi, ölçüm hatalarını hesaba katmadınız. Gerçek bir testte, böyle yapay bir değil. Ölçüm hatası, sonucu bir mil ile aşacağından herhangi bir farkı göremezsiniz. Böyle bir "profilleme sonuçları" yayınlamak, herhangi bir sebepten dolayı, hiçbir şey yapamaz. –

İlgili konular