關於為什麼儲存Transform等引用效率會更高

2021-07-07 10:03:28 字數 866 閱讀 9992

正常來說,大部分同學一般get transform都直接gameobject.transform使用。但往往,你會發現有些人會將transform引用儲存起來,例如:

private transform mytransform;

void awake()

然後使用mytransform替代this.transform。如果你不知道u3d內部實現獲取方式你肯定會以為這人腦抽水了,有直接的不用,還自己儲存起來。

this.transform並不是變數,而是乙個get/set屬性(property)。

using system;

using system.runtime.compilerservices;

using unityengineinternal;

namespace unityengine

} }

呼叫this.transform實際上是乙個呼叫intenal method的過程(這是用c/c++寫的,不是mono的)。值得注意的是這個呼叫方法略慢,因為你需要呼叫外部的cil(aka interop),花費了額外的效能。

估計大概的效率(沒測試,以後有時間再弄,大家可以參考下文章最後的鏈結):

getcomponent是this.transform的10倍消耗時間。

this.transform是儲存了引用mytransform的1.5倍的消耗時間。(因為新版優化了不少)

實際上:

如果你是偶爾呼叫一下transform的話,那就不要保留它的引用了,直接this.transform。

如果是update中,每一幀都要改變的話,還是保留一下this.transform的引用吧。畢竟倘若一大堆東西的話,能快不少呢。

詳細參考:

f:

為什麼要用儲存過程

原文 儲存過程的使用,好像一直是乙個爭論。我不傾向於盡可能使用儲存過程,是這麼認為的 1.執行速度 大多數高階的資料庫系統都有statement cache的,所以編譯sql的花費沒什麼影響。但是執行儲存過程要比直接執行sql花費更多 檢查許可權等 所以對於很簡單的sql,儲存過程沒有什麼優勢。2....

為什麼要用儲存過程

幾個去 ibm 面試的兄弟回來抱怨 去了好幾個不同的 ibm 專案組,幾乎每個面試官問到資料庫的時候都要問用沒用過儲存過程,煩人不?大家去面的程式設計師,又不是 dba,以前的專案都沒有用到儲存,不照樣執行的好好的?儲存過 的那麼重要嗎,它到底有什麼好處呢?筆者認為,儲存過程說白了就是一堆 sql ...

為什麼要用儲存過程

儲存過程說白了就是一堆 sql 的合併。中間加了點邏輯控制。但是儲存過程處理比較複雜的業務時比較實用。比如說,乙個複雜的資料操作。如果你在前台處理的話。可能會涉及到多次資料庫連線。但如果你用儲存過程的話。就只有一次。從響應時間上來說有優勢。也就是說儲存過程可以給我們帶來執行效率提高的好處。另外,程式...