Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida sobre gerenciamento de memória VS varável local

Bom dia, criar variável local dentro do método update é uma boa prática? Na minha visão leiga, se o método é chamado a todo momento, estaria criando e destruindo as variáveis a todo momento, enchendo assim a memória RAM. não seria melhor criar variáveis globais quando o uso delas forem dentro dos updates? Ou o unity sabe tratar isso de alguma forma?

1 resposta
solução!

Olá, tudo bem?

Sim isso faz certo sentido mas variáveis de tipos primitivos e locais não alocam memória na Heap então não precisam passar por Garbage Collector. Você vai ter um aumento de perfomance ridiculamente pequeno em sacrifício da legibilidade do seu código e provavelmente alguns bugs por tentar reutilizar variáveis. Além disso quando a sua função roda a execução já está sendo alocada na Stack então essas variáveis tem custo muito baixo e são de curto prazo porque quando a thread termina a memória da Stack já é liberada. Apesar disso tome cuidado com as ações executadas pra não dar overflow de memória na Stack que inclusive é o nome do principal fórum de programação (Stack Overflow haha).

Use variáveis na Heap para variáveis que realmente custam memória, por exemplo, quando você faz um Camera.main parece algo idiota mas é algo custoso para a Unity percorrer os objetos para achar a MainCamera ou então variáveis que serão utilizadas em for loops. Essas são variáveis que devem ter uma longevidade pois custam processamento pra acontecer e devem ser cacheadas se possível.

Resumindo é importante entender como a Unity lida com a memória e como ela é alocada e desalocada no nível do computador que é um conceito mais de programação. E sempre bom tomar cuidado não com essa alocação mas com o custo do que você está fazendo.

Abaixo estou deixando um artigo da Unity sobre isso e ao final dele tem alguns links úteis.

https://unity3d.com/pt/learn/tutorials/topics/performance-optimization/optimizing-garbage-collection-unity-games