Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: anarquistadel89 en 15 Octubre 2009, 04:26 am



Título: C# - Problemas con la memoria
Publicado por: anarquistadel89 en 15 Octubre 2009, 04:26 am
Hola a todos, estoy empezando con el C# y me he puesto como objetivo desarrollar un blackjack, y me encuentro con que cada 3 o 4 partidas el juego se queda colgado...

He estado buscando y creo que el problema viene dado porque cuando hago:

Código:
Cartas carta1 = new Cartas();

Me reserva un nuevo espacio en la memoria, quando lo que quiero es que me la sobreescriba.
Para solucionarlo primero pense en detectar si el objeto ya estaba creado, y en ese caso modificarlo.

Código:
if(carta1 == null){
       carta1 = new Cartas();
}else{
       carta1.Carta();
}

El metodo Carta, realiza lo mismo que el constructor, pero asi edito el ya existente y me ahorro comer mas memoria.

No funciona  :¬¬

Sigo buscando, y saco la conclusion de que tengo dos opciones
- Evitar que reserve mas espacio en la memoria (hasta ahora fracaso u.u)
- Conseguir eliminar ese espacio que ocupa antes de ocupar uno nuevo.

Con lo segundo he intentado poner los objetos en null y utilitzar metodos para "llamar" al GC y no ha habido manera.

A ver si alguien puede darme algo de luz >_<


Título: Re: C# - Problemas con la memoria
Publicado por: sangano en 18 Octubre 2009, 03:47 am
Hola, estas seguro que se queda pegado por falta de memoria?, podrias poner el codigo del construtor para ver que es lo que hace.

 Supestamente el metodo Cartas(), hace lo mismo que el constructor, donde guardas esa instancia, pon tambien el codigo del metodo, asi poder ayudarte mejor.

saludos.


Título: Re: C# - Problemas con la memoria
Publicado por: Pablo Videla en 18 Octubre 2009, 04:18 am
No puedes llamar al metodo si no tienes el objeto creado... =S


Título: Re: C# - Problemas con la memoria
Publicado por: anarquistadel89 en 18 Octubre 2009, 05:01 am
Código:
// Constructor
public Cartas(Random rnd) {
            this.palo = rnd.Next(1, 5);
            this.numero = rnd.Next(1, 14);
            // Construim ruta imatge a partir de les variables palo i numero
            this.imatge = ruta + this.palo + "_" + this.numero + ".JPG";
}
// Metodo
public void Carta(Random rnd) {
            this.palo = rnd.Next(1, 5);
            this.numero = rnd.Next(1, 14);
            this.imatge =ruta + this.palo + "_" + this.numero + ".JPG";
}



Estoy seguro de que no llamo al metodo sin haber creado el objeto. Ademas, el debuger me tiraria nullpointer.

La verdad es que si no es por memoria no se porque demonios se me puede quedar pegado.



Edit: Solucionado, no entiendo porque, pero al hacer esto ha dejado de quedarse pegado.

He pasado la creacion de el objeto de la clase Blackjack al metodo nuevoJuego. Antes lo ponia como un atributo.


Título: Re: C# - Problemas con la memoria
Publicado por: Pablo Videla en 18 Octubre 2009, 05:09 am
Tienes razon lei mal el if  :xD
pero el rnd esta nulo ese parametro debes crear el objeto random xD

Código
  1. public void Carta(Random rnd) {
  2. rnd= new Random();
  3.            this.palo = rnd.Next(1, 5);
  4.            this.numero = rnd.Next(1, 14);
  5.            this.imatge =ruta + this.palo + "_" + this.numero + ".JPG";
  6. }
  7.  


Título: Re: C# - Problemas con la memoria
Publicado por: anarquistadel89 en 19 Octubre 2009, 01:21 am
El Random ese ya lo construyo en la clase BlackJack. Es decir
Código
  1. class Blackjack{
  2.  
  3. ....
  4.  
  5.       Random rand = new Random((int)System.DateTime.Now.Ticks);
  6.       if(carta1 == null){
  7.            carta1 = new Cartas(rand);
  8.       }else{
  9.            carta1.Carta(rand);
  10.       }
  11.  
  12. ...
  13. }
  14.  


Título: Re: C# - Problemas con la memoria
Publicado por: MANULOMM en 19 Octubre 2009, 21:45 pm
Bueno aunque ya se soluciono nunca esta demas que sepas que son:
Los Destructores.
Garbage Collector.
La interfaz IDiposable y su metodo Dipose.

Esto te ayuda a el eliminar memoria no deseada.
Algunos creen que el Garbage Collector lo hace todo instantaneamente y eso no siempre ocurre, por eso es aconsejable destruir los objetos si consumente mucha memoria o recursos externos a la aplicacion.

Atentamente,

Juan Manuel Lombana
Medellín - Colombia


Título: Re: C# - Problemas con la memoria
Publicado por: pichucho87 en 16 Mayo 2013, 04:21 am
Disculap donde puedo ver el codigo completo de este trabajo q esta interesante?