Duda sobre estructuras

31/03/2005 - 13:52 por Zephryn Xirdal | Informe spam
Hola a todos.

Me ha surgido una duda respecto a la creación/destrucción de una estructura.

En mi caso la estructura es:

struct GameData

{

public int[,] matrix;

public int[,] rotation;

public bool[,] animatrix;

};



Cada vez que inicio un juego, reasigno memoria para matrix, rotation y
animatrix, pero al finalizar el mismo, no puedo liberar las matrices ni la
estructura completa.

¿Tendré problemas de memoria o ya se encargará el recolector de ir limpiando
los arrays viejos? Me refiero a que una estructura es un valor y no se toman
referencias, pero los elementos internos sí que son referencias y el GC
debería tomarlos en consideración, pero no estoy seguro de que sea así.

Podría añadir un método "ala dispose" en la estructura y llamarlo a mano,
pero entonces no sé cómo liberar dentro del mismo las variables matrix,
rotation y animatrix. ¿asignándoles null?

Gracias de antemano.

Preguntas similare

Leer las respuestas

#1 Octavio Hernandez
31/03/2005 - 13:57 | Informe spam
Zephryn,

Efectivamente, asignándoles null a esos campos harías que las matrices se
convirtieran en "garbage"...
Generalmente las estructuras se recomiendan cuando los campos son tipos
valor, en tu caso no será mucha la ganancia...

Slds - Octavio

"Zephryn Xirdal" escribió en el
mensaje news:
Hola a todos.

Me ha surgido una duda respecto a la creación/destrucción de una
estructura.

En mi caso la estructura es:

struct GameData

{

public int[,] matrix;

public int[,] rotation;

public bool[,] animatrix;

};



Cada vez que inicio un juego, reasigno memoria para matrix, rotation y
animatrix, pero al finalizar el mismo, no puedo liberar las matrices ni la
estructura completa.

¿Tendré problemas de memoria o ya se encargará el recolector de ir
limpiando los arrays viejos? Me refiero a que una estructura es un valor y
no se toman referencias, pero los elementos internos sí que son
referencias y el GC debería tomarlos en consideración, pero no estoy
seguro de que sea así.

Podría añadir un método "ala dispose" en la estructura y llamarlo a mano,
pero entonces no sé cómo liberar dentro del mismo las variables matrix,
rotation y animatrix. ¿asignándoles null?

Gracias de antemano.


Respuesta Responder a este mensaje
#2 Alfredo Novoa
31/03/2005 - 15:04 | Informe spam
On Thu, 31 Mar 2005 13:52:04 +0200, "Zephryn Xirdal"
wrote:

Hola a todos.

Me ha surgido una duda respecto a la creación/destrucción de una estructura.

En mi caso la estructura es:

struct GameData

{

public int[,] matrix;

public int[,] rotation;

public bool[,] animatrix;

};



Cada vez que inicio un juego, reasigno memoria para matrix, rotation y
animatrix, pero al finalizar el mismo, no puedo liberar las matrices ni la
estructura completa.

¿Tendré problemas de memoria o ya se encargará el recolector de ir limpiando
los arrays viejos? Me refiero a que una estructura es un valor y no se toman
referencias, pero los elementos internos sí que son referencias y el GC
debería tomarlos en consideración, pero no estoy seguro de que sea así.



No veo el problema. La siguiente vez que inicies un juego se libarará
la memoria del juego anterior.

Podría añadir un método "ala dispose" en la estructura y llamarlo a mano,
pero entonces no sé cómo liberar dentro del mismo las variables matrix,
rotation y animatrix. ¿asignándoles null?



También vale.


Saludos
Respuesta Responder a este mensaje
#3 Zephryn Xirdal
31/03/2005 - 15:45 | Informe spam
Sigo abajo.

"Octavio Hernandez" escribió en el mensaje
news:
Zephryn,

Efectivamente, asignándoles null a esos campos harías que las matrices se
convirtieran en "garbage"...
Generalmente las estructuras se recomiendan cuando los campos son tipos
valor, en tu caso no será mucha la ganancia...




La idea es tener todos los datos agrupados en un mismo sitio; así tengo un
array de n elementos de la estructura, de modo que puedo hacer n undos
rápidamente.

Como opción podría hacer una clase y embeber el comportamiento de los datos
dentro de ella en lugar de en el form (así tb separo un poco la ui del
núcleo), pero entonces sigo teniendo el mismo problema: los datos dentro de
esa clase han de estar agrupados en un array.

La mejor solución para los datos sería un contenedor "ala" stl... que con el
c# 2.0 se puede...


Slds - Octavio

"Zephryn Xirdal" escribió en el
mensaje news:
Hola a todos.

Me ha surgido una duda respecto a la creación/destrucción de una
estructura.

En mi caso la estructura es:

struct GameData

{

public int[,] matrix;

public int[,] rotation;

public bool[,] animatrix;

};



Cada vez que inicio un juego, reasigno memoria para matrix, rotation y
animatrix, pero al finalizar el mismo, no puedo liberar las matrices ni
la estructura completa.

¿Tendré problemas de memoria o ya se encargará el recolector de ir
limpiando los arrays viejos? Me refiero a que una estructura es un valor
y no se toman referencias, pero los elementos internos sí que son
referencias y el GC debería tomarlos en consideración, pero no estoy
seguro de que sea así.

Podría añadir un método "ala dispose" en la estructura y llamarlo a mano,
pero entonces no sé cómo liberar dentro del mismo las variables matrix,
rotation y animatrix. ¿asignándoles null?

Gracias de antemano.






Respuesta Responder a este mensaje
#4 Alfredo Novoa
31/03/2005 - 16:22 | Informe spam
On Thu, 31 Mar 2005 15:45:36 +0200, "Zephryn Xirdal"
wrote:

Efectivamente, asignándoles null a esos campos harías que las matrices se
convirtieran en "garbage"...
Generalmente las estructuras se recomiendan cuando los campos son tipos
valor, en tu caso no será mucha la ganancia...



La idea es tener todos los datos agrupados en un mismo sitio; así tengo un
array de n elementos de la estructura, de modo que puedo hacer n undos
rápidamente.



Pero para eso te vale lo mismo usar un tipo referencia que un tipo
valor.


Saludos
Respuesta Responder a este mensaje
#5 Zephryn Xirdal
31/03/2005 - 16:28 | Informe spam
Pero las estructuras son siempre tipo valor, ¿no?

"Alfredo Novoa" escribió en el mensaje
news:
On Thu, 31 Mar 2005 15:45:36 +0200, "Zephryn Xirdal"
wrote:

Efectivamente, asignándoles null a esos campos harías que las matrices
se
convirtieran en "garbage"...
Generalmente las estructuras se recomiendan cuando los campos son tipos
valor, en tu caso no será mucha la ganancia...



La idea es tener todos los datos agrupados en un mismo sitio; así tengo un
array de n elementos de la estructura, de modo que puedo hacer n undos
rápidamente.



Pero para eso te vale lo mismo usar un tipo referencia que un tipo
valor.


Saludos
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida