2013-07-09 14 views
6

A volte è necessario rilasciare manualmente risorse inutili nello sviluppo del gioco. Ma io non sono sicuro di quale sia il migliore traSequenza di GC e risorse di scarico in Unity3D

System.GC.Collect(); 
Resources.UnloadUnusedAssets(); 

e

Resources.UnloadUnusedAssets(); 
System.GC.Collect(); 

per quanto ne so, entrambi sono operazioni asincrone e ci potrebbe essere alcuna differenza.

Quindi la mia domanda è ...

  1. ci sono delle differenze?
  2. Se sì, quale è meglio?
+0

UnloadUnusedAsset è asincrono, ma in realtà è possibile cedere per attendere fino alla fine. – Heisenbug

risposta

9

Non c'è differenza tra questi due tipi.

System.GC.Collect() comunicherà a .Net collector di raccogliere oggetti gestiti da mono nell'heap gestito, mentre Resources.UnloadUnusedAssets si occupa di risorse (trame, suoni e altri supporti) che vengono inseriti nell'heap nativo. I due metodi fanno cose completamente diverse, quindi non c'è differenza rispetto a quella che verrà eseguita per prima. (Come hai detto, sono entrambi asincroni e basta impostare una bandiera per suggerire al sistema che potrebbe essere un buon momento per effettuare una raccolta.)

In effetti, non è così comune chiamare GC raccoglierti, tranne hai una buona ragione. Il GC del sistema funzionerà in tempo utile, la maggior parte delle chiamate per forzare un garbage collector non sono così necessarie come si pensa.

Se vi state chiedendo di più sulla memoria di Unity, potete fare riferimento a this blog, che può dirvi le cose in dettaglio.