Birkaç hafta önce C# ile çalışmaya başladım ve şimdi bir algoritmadaki farklı durumları ele almak için bir "bit seti" bayrağı oluşturmam gereken bir durumdayım.Düz int yerine bitly operatörleri kullanarak herhangi bir önemli performans artışı C# toplamı?
enum RelativePositioning
{
LEFT = 0,
RIGHT = 1,
BOTTOM = 2,
TOP = 3,
FRONT = 4,
BACK = 5
}
pos = ((eye.X < minCorner.X ? 1 : 0) << (int) RelativePositioning.LEFT)
+ ((eye.X > maxCorner.X ? 1 : 0) << (int) RelativePositioning.RIGHT)
+ ((eye.Y < minCorner.Y ? 1 : 0) << (int) RelativePositioning.BOTTOM)
+ ((eye.Y > maxCorner.Y ? 1 : 0) << (int) RelativePositioning.TOP)
+ ((eye.Z < minCorner.Z ? 1 : 0) << (int) RelativePositioning.FRONT)
+ ((eye.Z > maxCorner.Z ? 1 : 0) << (int) RelativePositioning.BACK);
Veya: Ben böylece iki seçenek vardır ((eye.X > maxCorner.X) << 1)
olarak
enum RelativePositioning
{
LEFT = 1,
RIGHT = 2,
BOTTOM = 4,
TOP = 8,
FRONT = 16,
BACK = 32
}
if (eye.X < minCorner.X) { pos += (int) RelativePositioning.LEFT; }
if (eye.X > maxCorner.X) { pos += (int) RelativePositioning.RIGHT; }
if (eye.Y < minCorner.Y) { pos += (int) RelativePositioning.BOTTOM; }
if (eye.Y > maxCorner.Y) { pos += (int) RelativePositioning.TOP; }
if (eye.Z > maxCorner.Z) { pos += (int) RelativePositioning.FRONT; }
if (eye.Z < minCorner.Z) { pos += (int) RelativePositioning.BACK; }
ben kullanmış olabilir bir şey ama C# bool gelen örtülü döküm int izin vermez ve üçlü operatör yeterince benzerdi. Şimdi sorum şu: ikinci versiyonun ilk versiyonunu kullanırken herhangi bir performans artışı var mı?
İkinci örnekte, standartif
liste olarak hemen hemen aynı IL üretecektir
Tommaso
kriter böyle bir şey olmazdı Bu şekilde Optimisations –
Mitch Buğday ile Katılıyorum. Ayrıca, bir profiler ile bir darboğazlığı kanıtlayamazsanız, performans üzerinde okunabilirliği de tercih edin. – OregonGhost
"Küçük verimlilikleri unutalım, zamanın yaklaşık% 97'sini söyleyelim: Prematüre optimizasyon tüm kötülüklerin köküdür" Donald Knuth – Cagdas