2013-07-09 8 views
6

Czasami musimy zwolnić niepotrzebne zasoby ręcznie podczas tworzenia gier. Ale nie jestem pewien, co jest lepsze odSekwencja GC i rozładowywanie zasobów w Unity3D

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

i

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

AFAIK, obaj są operacje asynchroniczne i nie może być żadnej różnicy.

Więc moje pytanie brzmi ...

  1. Czy jest jakaś różnica?
  2. Jeśli tak, to co jest lepsze?
+0

UnloadUnusedAsset jest asynchroniczne, ale w rzeczywistości można wydać, aby czekać, aż się skończy. – Heisenbug

Odpowiedz

9

Nie ma różnicy między tymi dwoma rodzajami.

System.GC.Collect() powie zbieraczowi .Net do zbierania obiektów zarządzanych przez mono w zarządzanej stercie, podczas gdy Resources.UnloadUnusedAssets zajmuje się zasobami (teksturami, dźwiękami i innymi mediami), które są umieszczane w rodzimej stercie. Obie metody robią zupełnie różne rzeczy, więc nie ma różnicy, która z nich zostanie wykonana jako pierwsza. (Jak powiedziałeś, oba są asynchroniczne i po prostu ustawiłeś flagę, aby zasugerować systemowi, że może to być dobry czas na zbieranie).

W rzeczywistości nie jest tak powszechne, że GC zbiera się sam, z wyjątkiem masz dobry powód. GC systemu będzie działać we właściwym czasie, a większość wezwań do wymuszenia zbierania śmieci nie jest tak potrzebna, jak myślisz.

Jeśli zastanawiasz się więcej o pamięci Unity, możesz zapoznać się z this blog, która może szczegółowo opisać rzeczy.