第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在 C# (Unity) 中使用靜態(tài)臨時(shí)變量有什么好處嗎?

在 C# (Unity) 中使用靜態(tài)臨時(shí)變量有什么好處嗎?

C#
一只名叫tom的貓 2023-08-20 14:38:18
我想在我的下一個(gè)項(xiàng)目中使用更好的實(shí)踐,其中可讀性顯然很有價(jià)值,但性能更重要。所以考慮這兩段代碼......在靜態(tài)溫度...public class Shot : MonoBehaviour {? ? static Actor tempActor;? ? static Vector3 tempVec;? ? static float tempFloat;? ? static HitResult hitResult;? ? public float damage;? ? public float unblockable;? ? public Vector3 originationPoint;? ? private void OnTriggerEnter(Collider collision) {? ? ? ? if (collision.gameObject.layer == 11) {? ? ? ? ? ? tempActor = collision.gameObject.GetComponent<Actor>();? ? ? ? ? ? if (tempActor != null) {? ? ? ? ? ? ? ? tempVec = collision.transform.position - originationPoint;? ? ? ? ? ? ? ? // cast ray? ? ? ? ? ? ? ? originatorActor.RayDisableColliders();? ? ? ? ? ? ? ? bool rayHit = Physics.Raycast(originationPoint, tempVec, out hitResult, range, 1<<11, QueryTriggerInteraction.Ignore);? ? ? ? ? ? ? ? if (rayHit) {? ? ? ? ? ? ? ? ? ? if (hitResult.collider.gameObject.CompareTag("Hero") || hitResult.collider.gameObject.CompareTag("Villain")) {? ? ? ? ? ? ? ? ? ? ? ? tempActor = hitResult.collider.gameObject.GetComponent<Actor>();? ? ? ? ? ? ? ? ? ? ? ? tempActor.HitByShot(class_utilities.GetAngle(hitResult.transform, originationPoint), damage, unblockable);? ? ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? originatorActor.RayEnableColliders();? ? ? ? ? ? }? ? ? ? }? ? }}當(dāng)?shù)匦嫉呐R時(shí)工public class Shot : MonoBehaviour {? ? public float damage;? ? public float unblockable;? ? public Vector3 originationPoint;? ? private void OnTriggerEnter(Collider collision) {? ? ? ? if (collision.gameObject.layer == 11) {? ? ? ? ? ? Actor tempActor = collision.gameObject.GetComponent<Actor>();? ? ? ? ? ? if (tempActor != null) {? ? ? ? ? ? ? ? Vector3 offset = collision.transform.position - originationPoint;? ? ? ? ? ? ? ? // cast ray? ? ? ? ? ? ? ? originatorActor.RayDisableColliders();? ? ? ? ? ? ? ? HitResult hitResult;兩種方法之間在性能方面有什么區(qū)別,特別是在我看來(lái)內(nèi)存分配和垃圾收集?
查看完整描述

2 回答

?
喵喵時(shí)光機(jī)

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊

最大的問(wèn)題不是性能 - 而是正確性。以這種方式使用靜態(tài)字段會(huì)改變含義,并可能導(dǎo)致以下任一方面的大問(wèn)題:

  • 多個(gè)線程訪問(wèn)相同的靜態(tài)值并在進(jìn)程中互相踩踏

    • 作為一種特殊情況,這不僅可能導(dǎo)致意外的值,而且還可能導(dǎo)致“撕裂”值,因?yàn)槟岬搅诉^(guò)大的結(jié)構(gòu),例如Vector3

  • 任何需要重入的東西;調(diào)用堆棧中的每個(gè)方法都會(huì)忽略該值,而不考慮任何預(yù)期的行為

基本上:除非你有很好的理由,否則不要這樣做(即不要濫用臨時(shí)本地變量的靜態(tài)字段);請(qǐng)改用常規(guī)局部變量。


性能上有什么區(qū)別嗎

就速度而言,幾乎肯定不是,但你必須使用 benchmarkdotnet 之類的東西來(lái)衡量它

在我看來(lái),尤其是內(nèi)存分配和垃圾收集

通過(guò)將值放入靜態(tài)字段,您可以通過(guò)該值使任何對(duì)象可達(dá):可達(dá)。如果您從不清除該字段,它可能會(huì)不必要地使任意大的對(duì)象圖保持活動(dòng)狀態(tài)。


查看完整回答
反對(duì) 回復(fù) 2023-08-20
?
Smart貓小萌

TA貢獻(xiàn)1911條經(jīng)驗(yàn) 獲得超7個(gè)贊

我傾向于同意 Marc Gravell 的主要概念,但我認(rèn)為他的答案更多地與 C# 相關(guān),而不是與 Unity 相關(guān)。

是的。我同意 C# 明智地將靜態(tài)值與線程混合可能會(huì)產(chǎn)生問(wèn)題......

但在您的特定情況下,OnTriggerEnter可以僅在主線程上運(yùn)行(例如許多其他與統(tǒng)一相關(guān)的方法),因此您沒(méi)有這樣的風(fēng)險(xiǎn)(除非您開(kāi)始在方法之外使用這些字段OnTriggerEnter)。

無(wú)論如何,情況是這樣的:

速度性能

參考文獻(xiàn)類型

  • 無(wú)論如何,參考值都會(huì)存在于堆中。從速度方面來(lái)說(shuō),最好將它們保持靜態(tài),否則它們將繼續(xù)從堆中分配/取消分配。

價(jià)值類型

  • 對(duì)于值類型則是另一回事了。如果它們是靜態(tài)的,您將把它們永久存儲(chǔ)在堆上(幾乎在所有情況下),而本地值類型將存在于堆棧中(壽命相當(dāng)短......)

  • 如果您將它們作為靜態(tài)放在堆上,我預(yù)計(jì),一般來(lái)說(shuō),您將需要更多時(shí)間來(lái)訪問(wèn)它們

  • 如果將它們分配在堆棧中(作為本地值),速度會(huì)快得多

內(nèi)存性能

  • 對(duì)于值類型,最好將它們分配在堆棧中(以及本地值)。

  • 內(nèi)存方面,引用類型也應(yīng)該比本地值更好。您可以根據(jù)需要將它們保留在內(nèi)存中。正如馬克所解釋的,使用靜態(tài)字段,您可以將它們無(wú)限期地保留在內(nèi)存中。

值類型肯定比本地值更好。引用類型在速度方面比靜態(tài)的性能更高,但在內(nèi)存方面比本地的性能更高。

一般來(lái)說(shuō),在您的具體情況下,即使是大量呼叫,我也沒(méi)有看到任何大的變化。

您仍然可以嘗試使用Unity 基準(zhǔn)測(cè)試工具對(duì)其進(jìn)行基準(zhǔn)測(cè)試(因?yàn)锽enchmarkDotNet不適用于開(kāi)箱即用的 Unity)。

就我而言...

我會(huì)使用本地值,更具可讀性。


查看完整回答
反對(duì) 回復(fù) 2023-08-20
  • 2 回答
  • 0 關(guān)注
  • 152 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)