[英]Why Vector3 is struct type in unity?
根據文檔,單位Vector3
是值類型。 同樣根據文檔“默認情況下,在賦值時,將參數傳遞給方法並返回方法結果,復制變量值。在值類型變量的情況下,復制相應的類型實例”。
不是性能、指針等方面的專家,但我認為通過引用而不是通過值傳遞 arguments 以避免復制實例的事實是關於性能的好習慣。 這就是為什么 c# 中的大多數類型都是引用類型的原因。
RaycastHit結構也一樣。
據我研究的類和結構有以下基本區別
對於我來說,這一切都不能證明放棄 ref 類型優勢的性能是合理的,所以,主要是Vector3
,在任何游戲中都會有向量作為 arguments 傳遞,所以在整個應用程序中復制,它是結構類型的原因是什么?
在比較類(引用類型)和結構(值類型)的性能時,我們不能說一個比另一個性能更好。 答案是:“這取決於”。
類在堆上分配,並被垃圾收集,與結構相比,這是一種開銷。
正如您所提到的,結構在傳遞時會被復制,這與類相比也是一種開銷(這並不是結構大小很小的開銷,這就是為什么設計指南在選擇結構時提到了大小限制)。
每個設計指南的一些一般規則是:
✔️ 如果類型的實例很小且通常短暫存在或通常嵌入在其他對象中,請考慮定義結構而不是 class。
❌ 避免定義結構,除非該類型具有以下所有特征:
- 它在邏輯上表示單個值,類似於原始類型(int、double 等)。
- 它的實例大小小於 16 個字節。
- 它是不可變的。
- 它不必經常裝箱。
實際上,當您有疑問時,您應該針對您的特定場景進行基准測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.