Yapısal olarak ikiye sarılarak ölçü birimi sistemi dediğimi alıyorum. Metre, Ikinci, Derecesi, vb. Gibi C# yapılarım var. Asıl düşüncem, derleyicinin her şeyi sıraladıktan sonra, bir çiftin kullanıldığı gibi bir performans göstermesiydi.Ölçü birimlerini ifade etmek için C# türlerini kullanma
Açık ve örtük işleçlerim basit ve basittir ve derleyici aslında bunları satır içi olarak gösterir, ancak Sayaç ve İkinci olan kod çift kullanılarak aynı koddan 10 kat daha yavaştır.
Sorum şu ki: neden C# derleyicisini, ikinci olarak her zaman satır içi yer alıyorsa çift kullanarak kod kullanarak en uygun kodu kullanamazsınız?
İkinci aşağıdaki gibi tanımlanmıştır:
struct Second
{
double _value; // no more fields.
public static Second operator + (Second left, Second right)
{
return left._value + right._value;
}
public static implicit Second operator (double value)
{
// This seems to be faster than having constructor :)
return new Second { _value = value };
}
// plenty of similar operators
}
Güncelleme:
yapı burada uyuyor diye sormadı. Öyle.
Kodun satır içi çizilip girilmeyeceğini sormadım. JIT bunu satır içi yapar.
Çalışma zamanında gönderilen montaj işlemlerini kontrol ettim. Onlar böyle kodu için farklıydı:
var x = new double();
for (var i = 0; i < 1000000; i++)
{
x = x + 2;
// Many other simple operator calls here
}
ve bunun gibi: operasyonları aslında inlined edildi yüzden
var x = new Second();
for (var i = 0; i < 1000000; i++)
{
x = x + 2;
// Many other simple operator calls here
}
sökme hiçbir çağrı talimatları vardı. Ancak fark önemli. Performans testleri, Second'in çift kullanımdan 10 kat daha yavaş olduğunu göstermektedir.
Sorularım (dikkat!): JIT neden IA64 kodu yukarıdaki durumlar için farklıdır? Yapının iki kat hızlı çalışmasını sağlamak için ne yapılabilir? Çifte-İkinci arasında teorik bir fark yok gibi görünüyor, gördüğüm farkın derin nedeni nedir?
bu bir 'implicit' veya '+' operatörüdür? –
Bu konuyla ilgilenebilirsiniz: http://stackoverflow.com/questions/348853/units-of-measure-in-c-almost – Benjol
C# kullandığınızı biliyorum, ama F # olarak düşündünüz mü? Baktığınız gibi bir şey olan statik birimlerin kontrolünü yaptı. Http://stackoverflow.com/questions/40845/how-do-f-units-of-measure-work adresine bakın. –