Yapılar ve açık alanlar, bazı yönetilmeyen API'lerle birlikte çalışabilirliği kolaylaştıracaktır. Genellikle düşük seviye API'nin referans olarak değerlere erişmek istediğini göreceksiniz, bu da performans için iyidir (gereksiz bir kopyadan kaçınıyoruz). Özelliklerin kullanılması bunun önünde bir engeldir ve genellikle sarıcı kitaplıklarının kullanım kolaylığı için ve bazen de güvenlik için kopyalar çıkarması gerekir.
Bu nedenle, özellikleri olmayan ama çıplak alanlara sahip vektör ve matris türlerinde daha iyi performans elde edersiniz.
En iyi uygulamalar vakumda yaratma değildir. Bazı kargo kültlerine rağmen, genel olarak en iyi uygulamalar iyi bir neden için var.
Bu durumda bir çiftimiz var:
Bir özellik, istemci kodunu değiştirmeden uygulamayı değiştirmenize izin verir (ikili düzeyde, bir alanı müşteri kodunu kaynak düzeyinde değiştirmeden bir özellik olarak değiştirmek mümkündür, ancak değişiklikten sonra farklı bir şey derleyecektir) . Bu, en baştan bir özellik kullanarak, kendinize ait kodun yalnızca mülkün dahili olarak ne yaptığını değiştirmek için derlenmesi gerekmeyeceği anlamına gelir.
Türünüzdeki alanların olası tüm değerleri geçerli durum değilse, bunları değiştiren kodla istemci koduna maruz bırakmak istemezsiniz. Bu nedenle, bazı değer kombinasyonları geçersizse, alanları özel (veya dahili) tutmak istersiniz.
Müşteri kodu söylüyorum. Bu, kendinize ait kod anlamına gelir. Bir kütüphane yapmıyorsanız (veya kütüphane bile oluşturuyorsanız ama halk yerine dahili kullanıyorsanız), genellikle onunla ve iyi bir disiplinle karşılaşabilirsiniz. Bu durumda özellikleri kullanmanın en iyi yolu, kendinizi ayağınızdan vurmanızı engellemektir. Ayrıca, bir alanın tek bir dosyada değişebileceği tüm yerleri görebiliyorsanız, başka bir yerde değiştirilip değiştirilmediği konusunda endişelenmek yerine, kod hakkında karar vermek çok daha kolaydır. Aslında, özellikleri neyin yanlış gittiğini bulduğunuzda kesme noktaları koymak için de iyidir.
Evet, sektörde neler yapıldığını görmenin bir değeri var. Ancak, en iyi uygulamalara karşı çıkmak için bir motivasyonunuz var mı? ya da sadece bir başkasının yaptığı için, en iyi uygulamalara karşı mı çıkıyorsunuz - kodun nedenini zorlaştırıyor musunuz? Ah, bu arada, "diğerleri yapar", bir kargo kültüne nasıl başladığın.
Yani ... oyunun yavaş mı çalışıyor? Ne olabileceğini tahmin etmek yerine, tıkanıklığı bulmak ve düzeltmek için zaman ayırmanız daha iyi. Derleyicinin birçok optimizasyon yapacağına emin olabilirsiniz, bu nedenle, şansınızı yanlış soruna bakıyorsunuzdur.
Kapak tarafında, ne ile başlayacağınıza karar verirseniz, alanlar ve özellikler gibi daha küçük detaylar için endişelenmek yerine, önce hangi algoritmaları ve veri yapılarını merak etmelisiniz.
Sonunda, en iyi uygulamalara karşı çıkarak bir şeyler mi kazanıyorsunuz?
Davanızın detayları için (Unity ve Android için Mono), Unity değerleri referans alıyor mu? Olmazsa, değerleri yine de kopyalar, orada performans artışı olmaz.
Varsa, bu verileri ref ile alan bir API'ye aktarıyorsanız. Alanın herkese açık hale getirilmesi mantıklı geliyor mu yoksa türün doğrudan API'yi arayabilmesini sağlayabiliyor musunuz?
Evet, elbette, çıplak alanları olan yapılar kullanarak yapabileceğiniz optimizasyonlar olabilir. Örneğin, onlara işaretçilerle Span<T>
veya benzerleriyle erişirsiniz . Aynı zamanda hafızada kompakt olduklarından ağ üzerinden gönderilmek üzere seri hale getirilmelerini veya kalıcı depolamaya alınmalarını kolaylaştırır (ve evet bunlar kopyadır).
Şimdi, doğru algoritmaları ve yapıları seçtiniz mi, eğer bir darboğaza dönüşürlerse, onu düzeltmenin en iyi yolunun ne olduğuna karar verdiniz ... çıplak alanlara sahip yapılar olabilir. Ne zaman ve ne zaman olacağı konusunda endişelenebileceksiniz. Bu arada, oynamaya değer iyi veya eğlenceli bir oyun yapmak gibi daha önemli konular için endişelenebilirsiniz.