none
Variables que se liberan ellas solas teniendo referencias a las mismas RRS feed

  • Pregunta

  • Hola.

    Me está pasando una cosa kafkiana con la aplicación que estoy haciendo: Windows Phone borra elementos de una lista él solo.

    Igual que se tiene una instancia estática del ViewModel en la clase App, yo tengo otros elementos iguales pero que no le pertenecen. Son datos internos a la aplicación.

    En concreto tengo una clase que encapsula una lista de objetos que voy creando y añadiendo conforme me van haciendo falta, objetos que vienen accedidos por toda la aplicación.

    Pues, bien, cuando a WP le viene en gana, me borra uno o dos objetos de la lista, sin motivo aparente. Con solo moverme por el pivot principal, o abrir alguna page (que para más inri accede a esos elementos), la aplicación coge y borra alguno de la lista.

    No son objetos huérfanos, ni han perdido referencia a ellos. Están en una List<Clase> dentro de la clase que he citado... y de hecho se accede tanto a la clase como a los objetos de la lista en todo momento dentro de la aplicación.

    Para estar seguro de que no los estoy borrando yo, he creado un destructor para los objetos y puesto un breakpoint. En el Call Stack no aparece nada, y de hecho la llamada al destructor viene fuera de contexto (ventana vacía salvo el propio objeto). Además, son objetos aleatorios y solamente de esa lista.

    Ya sé que WP libera toda la memoria que puede de forma agresiva, pero demasiado agresivo me parece.

    ¿Tiene alguien una idea de qué puede estar pasando?


    MVP Visual C++ - Visita mi blog sobre desarrollo: http://geeks.ms/blogs/rfog/

    jueves, 27 de septiembre de 2012 15:16

Respuestas

  • Bueno, al final creo haber encontrado el problema. Esos elementos venían asignados de una biblioteca, que los recibe de internet y genera un objeto a partir de ello. Yo tomo los que me interesan y los guardo en una lista... Pues parece ser que la librería liberaba algunos de ellos. Lo curioso del tema es que a mi me desaparecía no solo el objeto liberado por la biblioteca, sino mi propio objeto completo, como si el GC se liara (cosa que ya me pasó un par de veces en C++/CLI en escritorio, pero con delegados liberados pese a estar vivos en otra clase). Pero en este caso es todo manejado, así que lo veo difícil... Bueno, la cosa es que cambié la forma en que procesaba la lista y ahora ya no ocurre. Si la biblioteca libera algo, yo sigo con mi objeto completo. Intenté re producir el problema trasteando sólo con la clase y la biblioteca, pero tampoco saqué nada en claro (funcionaba bien), así que rehice algo de código y se arregló. Lo mismo estaba yo liberando el código en algún otro lado sin darme cuenta... Lo bueno es que está solucionado. Gracias por tu interés.

    MVP Visual C++ - Visita mi blog sobre desarrollo: http://geeks.ms/blogs/rfog/

    • Marcado como respuesta RFOG lunes, 1 de octubre de 2012 11:02
    sábado, 29 de septiembre de 2012 18:13

Todas las respuestas

  • Buenas!

    La verdad es que es algo curioso, ¿Tendrás algun ejemplo simple en el que se reproduzca el problema para darle un vistazo y depurar un poco?

    Un saludote!


    MCTS - .NET 4.0 Windows Applications
    MCTS - .NET 4.0 Data Access
    MCTS - .NET 4.0 Service Communication Applications
    MCPD - .NET 4.0 Windows Developer
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter

    viernes, 28 de septiembre de 2012 11:01
    Moderador
  • Bueno, al final creo haber encontrado el problema. Esos elementos venían asignados de una biblioteca, que los recibe de internet y genera un objeto a partir de ello. Yo tomo los que me interesan y los guardo en una lista... Pues parece ser que la librería liberaba algunos de ellos. Lo curioso del tema es que a mi me desaparecía no solo el objeto liberado por la biblioteca, sino mi propio objeto completo, como si el GC se liara (cosa que ya me pasó un par de veces en C++/CLI en escritorio, pero con delegados liberados pese a estar vivos en otra clase). Pero en este caso es todo manejado, así que lo veo difícil... Bueno, la cosa es que cambié la forma en que procesaba la lista y ahora ya no ocurre. Si la biblioteca libera algo, yo sigo con mi objeto completo. Intenté re producir el problema trasteando sólo con la clase y la biblioteca, pero tampoco saqué nada en claro (funcionaba bien), así que rehice algo de código y se arregló. Lo mismo estaba yo liberando el código en algún otro lado sin darme cuenta... Lo bueno es que está solucionado. Gracias por tu interés.

    MVP Visual C++ - Visita mi blog sobre desarrollo: http://geeks.ms/blogs/rfog/

    • Marcado como respuesta RFOG lunes, 1 de octubre de 2012 11:02
    sábado, 29 de septiembre de 2012 18:13