Estoy usando Unity y a veces estoy usando la new
palabra clave th Update
, como new Vector3()
etc ...
Me pregunto si esto causa pérdida de memoria. Quiero decir que en cada cuadro se crea un nuevo Vector3. Si esta es la forma de trabajar, significa que hay miles de Vectores creados en la memoria. ¿Es verdad o pienso mal?
new Vector3
porqueVector3
es unstruct
. Si es una clase, entonces eso es un problema. Lea la publicación completa sobre el uso de la agrupación de objetos.Respuestas:
En C # hay dos tipos de tipos, aproximadamente: tipos de valor y tipos de referencia .
Tu usas
new
cuando se crean ambos, pero los tipos de valor se crean en la pila (la mayoría de las veces), y solo los tipos de referencia se crean en el montón. Una vez creados, los tipos de referencia permanecen hasta que aparece el recolector de basura, determinan que ya no son necesarios y los recolecta. Las instancias en la pila se destruyen eficientemente cuando el marco de la pila desaparece (cuando termina la función en la que se crearon).Vector3
es un tipo de valor en Unity, por lo que casi todas las instancias que crees se almacenarán en la pila y, por lo tanto, son baratas tanto para crear como para destruir. Así que probablemente no estés haciendo nada mal aquí. Ciertamente no crea una pérdida de memoria, y casi seguro que no será un problema de rendimiento (de todos modos, querría tener un perfil seguro).Crear una gran cantidad de nuevos tipos de referencia en cada cuadro puede ser problemático, ya que puede inducir al recolector de basura a ejecutarse con mayor frecuencia, causando problemas al pausar todos los hilos para hacer su trabajo. Pero los tipos de valor como
Vector3
son una apuesta bastante segura.fuente
int
campo en un tipo de referencia termina en el montón ya que los tipos de referencia se almacenan en el montón. Aparte de eso, +1