ABCHola ¿Es tu primera visita?
Registro
Mostrando resultados 1 de 13 de un total de 13
  1. #1
    Intermitente
    Fecha de registro:
    23 de enero de 2004
    Mensajes:
    41
    Dispositivo móvil:
    iPAQ h 2210
    Sistema operativo:
    Windows Mobile 2003

    Por defecto Liberar en Memoria

    Hola gente, les comento cual es la duda que tengo.

    Estoy desarrollando un software en C# y SQL CE 2.0. La handHeld utilizada es una Ipaq 2210.

    El problema que tengo es que cuando ejecuto consultas que retorna unos cuantos registros (digamos unos 7000 registros), despues no libera la memoria asignada.

    El objeto que ejecuta la consulta tiene como atributos un objeto SQLCeDataApater y un DataSet. Despues de ejecutar la consulta y trabajar con los registros para liberar el objeto se le asigna null. EL problema es que no libera la memoria utilizada para ejecutar la consulta.
    He probado invocar al método GC.Collect() y tampoco funcionó.

    Estaré muy agradecido si alguien me da una mano...

    Saludos, y Muchas gracias...

  2. #2
    Intermitente
    Fecha de registro:
    12 de marzo de 2004
    Mensajes:
    41
    Dispositivo móvil:
    Otro
    Sistema operativo:
    Pocket PC 2000

    Por defecto

    Hola Oliver, a mi me sucede los mismo con una aplicación desarrollada en Visual .NET c#: Conforme abro (Ficha.ShowDialog()) y cierro pantallas (Ficha.Close(), Ficha.Dispose()) veo que la memoria en uso aumenta y no disminuye cuando la pantalla realmente está cerrada no encontrándose en los programas en ejecución. ¿ENCONTRASTE ALGUNA SOLUCION A ESTE PROBLEMA? Si es asi, te agradecería muchísimo que me la indicases ya que estoy desesperadísimo...

    Gracias de antemano.

  3. #3
    Intermitente
    Fecha de registro:
    19 de abril de 2004
    Desde:
    Girona
    Mensajes:
    79
    Dispositivo móvil:
    IPAQ 3760(opie), hx2410, x51v
    Sistema operativo:
    Windows Mobile 2003 SE

    Por defecto

    Los objectos SqlCeDataReader y SqlCeCommand requieren un Close() y Dispose() para liberar la memoria.

    Si no se hace al cabo de varias consultas (depende del tamaño de estas) da un error de memoria llena.

  4. #4
    Iniciado
    Fecha de registro:
    16 de febrero de 2006
    Mensajes:
    15
    Dispositivo móvil:
    QTECK
    Sistema operativo:
    Windows Mobile 2003 Phone Edition

    Por defecto A mi al contrario.

    Yo tengo una aplicación que utiliza tanto el fill para cargar un dataset como el executedatareader.

    Lo que hice fue crear un objeto estatico de acceso a BD y en ese caso la maquina realiza una gestión más o menos correcta de la memoría, me da la sensación de que reaprovecha los objetos internamente.

    El otro día probe a meter el Close y el Dispose y tras la primera consulta, a la mierda la memoria, entendeis este tema?

  5. #5
    Intermitente
    Fecha de registro:
    19 de abril de 2004
    Desde:
    Girona
    Mensajes:
    79
    Dispositivo móvil:
    IPAQ 3760(opie), hx2410, x51v
    Sistema operativo:
    Windows Mobile 2003 SE

    Por defecto

    Yo tamien dispongo de una sola conexión con la base de datos que se conecta al abrir el programa y se desconecta al salir.

    Con los Close y Dispose, se pude trabajar durante todo el dia y ya no da errores de memoria.

  6. #6
    Intermitente
    Fecha de registro:
    12 de marzo de 2004
    Mensajes:
    41
    Dispositivo móvil:
    Otro
    Sistema operativo:
    Pocket PC 2000

    Liberar memoria

    Por fin, después de mucha vueltas, he logrado que el programa no 'casque' por falta de memoria. Además de realizar el Close() y Dispose() del Form, realizo el Dispose() de los objetos que contiene dicho Form antes de cerrarlo. Me he creado una función que realiza el Dispose() de los objetos contenidos en el Form y lo lanzo en el "On Closing" del mismo.

    /// Libera recursos del control pasado como parámetro.
    public static void LiberarControles(System.Windows.Forms.Control control)
    {
    for (int i = 0; i <= control.Controls.Count - 1; i++)
    {
    if (control.Controls[i].Controls.Count > 0)
    LiberarControles(control.Controls[i]);
    control.Controls[i].Dispose();
    }
    }

    Espero que os sea útil. Hasta otra.

  7. #7
    Incansable
    Fecha de registro:
    13 de agosto de 2006
    Desde:
    Málaga
    Mensajes:
    151
    Dispositivo móvil:
    qtek 9100 y G100
    Sistema operativo:
    Windows Mobile 5.0

    Por defecto

    Ya he puesto estas referencias en otros Temas, perolo voy a repetir aquí ya que esta relacionado con lo que comentais.

    El diseño de aplicaciones en Smart Devices tiene que llevarse a cabo de una forma diferente a como lo hacemos tradicionalmente en un computador de sobremesa. En particular, cuando queremos desarrollar una aplicación con alto grado de navegación a nivel de formularios (maestro -> detalle...) no podemos caer en la trampa de pensar que nuestros problemas se van a resolver con un close o un dispose. El coste de creación de los formularios es muy alto, al igual que el de su destrucción. La pregunta que tenemos que hacernos es: ¿para que voy a crear y destruir 20 veces el formulario de detalle X?

    La solución a este problema esta muy bien desarrollada en dos artículos técnicos de hace algun tiempo. En primer lugar os recomiendo que empeceis por leer la solución que propone Justin Weinberg en el artículo Another MultiForm Framework for the Microsoft .NET Compact Framework
    en OpenNetCF. Despues deberiais pasar a la joya de la corona, que es el artículo de Chris Take en la MSDN: Creating a Multiple Form Application Framework for the Microsoft .NET Compact Framework

    Leed y flipad.

    Los links son:
    http://www.opennetcf.org/PermaLink.a...2-7007242acdb9

    http://msdn.microsoft.com/library/de...iframework.asp

    Un saludo

  8. #8
    Iniciado
    Fecha de registro:
    17 de agosto de 2004
    Mensajes:
    13
    Dispositivo móvil:
    Dell Axim X3
    Sistema operativo:
    Pocket PC 2002

    Wm5

    He leido los dos artículos y la verdad es que som muy interesantes. De todos modos, ambos se basan en una implementación para 2003. Alguien sabe el "problema" de la liberación de memória sigue dándose en WM5?

    Gracias!

  9. #9
    Desarrollador Movil Avatar de pedroplacido
    Fecha de registro:
    2 de diciembre de 2005
    Desde:
    Lima
    Mensajes:
    83
    Dispositivo móvil:
    Unitech, Datalogic, Symbol, HHP, PSION
    Sistema operativo:
    Windows Mobile 5.0

    Por defecto

    Tengo un problema al trabajar segun el artículo publicado por jmccozar.
    Yo trabajo con código de Barras y en el equipo que uso solo me deja tenerlo abierto en un formulario a la vez, es decir si deseo pasar a otro formulario donde tambioen voy a leer con el código de Barras tengo antes que cerrar el Scanner en el formulario anterior.

    Con la forma de trabajo del articulo no me deja trabajar bien con el scanner ya que a pesar de que cierro un formulario cuando voy a otro, parece que no se elimina completamente. Solo me deja funcionar el scanner en un solo formulario. Saben como se puede arregaklr este problema

  10. #10
    Iniciado
    Fecha de registro:
    17 de agosto de 2004
    Mensajes:
    13
    Dispositivo móvil:
    Dell Axim X3
    Sistema operativo:
    Pocket PC 2002

    Por defecto

    Yo finalmente no usé el modelo del "Multiform framework" sino que tengo un solo formulario donde voy poniendo mis pantallas. Cada pantalla la tengo desarrolada como un UserControl y las voy poniendo en el form a medida que tengo que cambiar. Con este modelo talvez podrias tener el Scanner a nivel del form y invocarlo desde las pantallas.

    La verdad es que no he experimentado mucho con el tema de la memoria, creeis que me voy a encontrar con el mismo problema y tendré que usar un Multi-UserControl framework? O así me va a funcionar bien?

    Hasta pronto!

  11. #11
    Desarrollador Movil Avatar de pedroplacido
    Fecha de registro:
    2 de diciembre de 2005
    Desde:
    Lima
    Mensajes:
    83
    Dispositivo móvil:
    Unitech, Datalogic, Symbol, HHP, PSION
    Sistema operativo:
    Windows Mobile 5.0

    Por defecto

    Podrias enviarme un ejemplo de la forma como trabajas con User control

  12. #12
    Iniciado
    Fecha de registro:
    17 de agosto de 2004
    Mensajes:
    13
    Dispositivo móvil:
    Dell Axim X3
    Sistema operativo:
    Pocket PC 2002
    A ver,

    En mi proyecto tengo un solo Form y otra clase llamaca Controlador, que es la que gestiona la navegación entre pantallas (más adelante vereis como funciona...). Luego, tengo un UserControl llamado BasePantalla i este tiene un puntero al Controlador para hacer las llamadas a la función Navegar y otras funcionalidades concretas. Luego, cada pantalla que desarrollo hereda de esta para hacer la navegación a otra pantalla. Luego todo es muy simple: quando quiero hacer otra pantalla, por ejemplo al hacer el login, hago una llamada a Controlador.Navegar(Accion.HacerLogin). El codigo de navegar es el siguiente


    void Navegar(Accion accion)
    {
    Cursor.Current = Cursors.WaitCursor;
    BasePantalla pantalla = null;
    switch (accion)
    {
    case Accion.Inicio:
    pantalla = new Login();
    break;
    case Accion.HacerLogin:
    pantalla = new SeleccionPaciente (TipoImputacion.Directa);
    break;
    [...]
    default:
    break;
    }

    pantalla.Dock = System.Windows.Forms.DockStyle.Fill;
    pantalla.Manager = this;
    m_formulario.Presentar(pantalla);
    Cursor.Current = Cursors.Default;
    }

    Personalmente me gusta la solución de usar Acciones porque te deja cambiar la navegación a través de pantallas muy fácilmente. Además el controlador alberga las variables locales de la aplicación (Usuario, etc...)
    En la última línea es donde cambio de pantalla en el formulario (m_formulario es el formulario de la aplicación. El codigo de la función Presentar (pantalla) es muy senzillo:

    public void Presentar(BasePantalla pantalla) {
    PContenedor.Controls.Clear();
    PContenedor.Controls.Add(pantalla);
    pantalla.Show();
    }

    Evidententemente la variable PContenedor es el panel donde maestro mis “pantallas”

  13. #13
    Iniciado
    Fecha de registro:
    20 de julio de 2007
    Mensajes:
    23
    Dispositivo móvil:
    ASUS
    Sistema operativo:
    Windows Mobile 5.0

    Por defecto

    Buenas. Estoy empezando un proyecto y veo que cuesta hacer forms modales, menus que se mantienen en toda la aplicacion, etc...

    Luego viendo los posts de este tema, creo que me gusta la idea de hacer 1 unico Form con un panel donde se carguen las pantallas en modo User Control. Tambien me gustaria implementar los mismos mecanismos de cache y pila, que se muestran en los articulos de los primeros posts, pero a nivel de user Control. Alguien me puede decir si es un buen mecanismo o voy muy perdido?

    Saludos.


 

Información del tema

Users Browsing this Thread

Hay actualmente 1 usuarios viendo este tema. (0 usuarios registrados y 1 usuarios sin registrar)

Temas similares que te pueden interesar

  1. Liberar memoria hp
    Por monano en el foro Software Windows Mobile (Todas las marcas)
    Respuestas: 6
    Último mensaje: 01 de septiembre de 2006, 21:08
  2. liberar memoria en la jasjar
    Por transbadal en el foro Otros
    Respuestas: 28
    Último mensaje: 07 de abril de 2006, 21:14
  3. Liberar memoria de los Dialogs
    Por atomicant en el foro Programación en Windows Mobile
    Respuestas: 7
    Último mensaje: 29 de abril de 2004, 17:28
  4. liberar memoria eVB
    Por osloji en el foro Programación en Windows Mobile
    Respuestas: 1
    Último mensaje: 21 de noviembre de 2003, 23:30
  5. liberar memoria
    Por alex8 en el foro Software Windows Mobile (Todas las marcas)
    Respuestas: 1
    Último mensaje: 17 de abril de 2003, 20:14

Comparte este hilo en:

Comparte este hilo en:

Pautas del foro

  • No puedes publicar nuevos temas
  • No puedes publicar respuestas
  • No puedes publicar ficheros adjuntos
  • No puedes editar tus mensajes
  •  
Twitter Facebook You Tube RSS