Memoria insuficiente

Colapsar
X
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar todos
nuevos mensajes

  • Memoria insuficiente

    Hola recientemente he terminado mi primera aplicación en VB 2012, no sin la ayuda inestimable del amigo Movilla.
    Esta aplicación lo que hace, entre otras cosas, es presentar una serie de gráficos en control PictureBox que va actualizando cada cierto tiempo (el que se indica en el programa).
    Funciona bien, pero de repente me presenta un problema que cuando va pasando las imágenes me da una error de "Memoria insuficiente" y también me dice "Si está trabajando con matrices compruebe que las dimensiones son las adecuadas (o algo similar).
    Lo cierto es que no acabo de entender y os explico porqué: los gráficos los presenta por grupos de autores. Voy seleccionado el autor y me presenta los suyos y esto lo hago cargando una matriz con el nombre del gráfico que está almacenado en una carpeta. Mediante un temporizador (obra, dicho sea de paso, de J.M.Movilla) voy pasando las imágenes.
    Esto lo hace bien a veces ya que en ocasiones me da el error que os comento y lo extraño es que tengo por ejemplo un grupos con 300 registros y presenta las trescientas imágenes (casi siempre son jpg)
    sin problemas, pero sin embargo presento un grupo de 250 imágenes y me aparece el error y no entiendo que puede deberse a falta de memoria (tengo 4 GB), ni de dimensionamiento de la matriz puesto que con matrices más grandes funciona.
    He mirado a ver si había algún gráfico con errores o excesivamente grande y no es así.
    Llevo no se cuantas búsquedas por Internet y las soluciones que encuentro no las entiendo o me aclaro con ellas.
    En la ayuda del programa hace referencia a ello pero no aporeta soluciones (al menos que yo vea).
    ¿Sabéis algo de este error?
    Perdón por la extensión del comentario, pero no encontraba una manera más corta de hacerlo.
    Saludos.

    P.D. Al final me vais a mandar a la porra con tanta pregunta.


  • #2
    ¿Que tal si la línea
    If i > filas - 2 Then Timer1.Stop()
    la conviertes a
    If i > filas - 2 Then Erase filas: Timer1.Stop()

    José María Movilla Cuadrado
    ______________________
    Normas del foro
    www.foro.vb-mundo.com
    www.vb-mundo.com

    Comentario


    • #3
      Hola José María.
      Gracias de nuevo por tu ayuda.
      He probado lo que me dices, pero me responde que "la instrucción Erase requiere una matriz"
      y la verdad es que no se me ocurre que pueda ser. Filas es precisamente la dimensión de la matriz.
      he probado también con Redim presenta(0) y da el mismo error.

      Cosa curiosa un autor (A) 227 gráficos y otro autor (B) tiene 417. gráficos.
      Con el autor B llega hasta el final sin error y, sin emvargo, con el autor A me da el error.

      Voy a seguir investigando por esa línea a ver si encuentro algo.
      Gracias de nuevo.
      Última edición por MiguelPG; 20-04-2017, 01:11 AM.

      Comentario


      • #4
        Otra metedura de pata por buscar la rapidez en la respuesta... No ha de ser Erase filas, sino Erase Presenta.
        Ojalá demos con la solución, aunque sea a la segunda...
        José María Movilla Cuadrado
        ______________________
        Normas del foro
        www.foro.vb-mundo.com
        www.vb-mundo.com

        Comentario


        • #5
          Creo que he visto el problema.
          La presentación la hago en un PictureBox y mientras se trate de ficheros jpg, jpeg y creo que algunos más (no se si también los gif) la cosa va bien.
          Pero en este caso hay muchos con extensiones diferentes, como WXS, PAT, PDF y otros, y en cuanto encuentra uno de esos da ese error que, por cierto, ya me contarás lo que aclara las cosas. Me imagino que será porque intenta seguir leyendo y llega un momento en que, efectivamente, se queda sin memoria.
          Así que voy a ver si encuentro un visor de imágenes que no sea PictureBox y admita otras extensiones.
          Vamos a ver lo que encuentro, si es que encuentro algo.
          De nuevo gracias por tu inestimable ayuda.

          Comentario


          • #6
            Vamos a ver si al menos evitamos el error, aunque aun te quede solucionar la visualización de los archivos que no admite el PictureBox:

            Código:
            Private Sub Timer1_Tich(...
                Dim cExt As String
            
                presenta(i) = "C:/Dis...
                cExt = presenta(i).Extension
                Select Case cExt
                    Case ".jpg", ".jpeg", ".bmp", ".gif"  ' Aquí irás añadiendo extensiones válidas...
                        Carrusel.Image = Image.FromFile(presenta(i))
                        lblNombreGrafico.Text = Convert...
                    Case Else
                        MsgBox("Extensión " & cExt & " no válida.")
                End Select
                i += 1
            
                If i > filas - 2 Then Erase presenta: Timer1.Stop()
                End Sub
            José María Movilla Cuadrado
            ______________________
            Normas del foro
            www.foro.vb-mundo.com
            www.vb-mundo.com

            Comentario


            • #7
              Hola de nuevo.
              Ante todo, disculpa por mi demora en responder. Ocurre que tuve que salir de casa inesperada y urgentemente y acabo de volver (son más de la dos de la madrugada). Afortunadamente al final no ha ocurrido nada grave.
              Mañana por la mañana probaré esto que me indicas que es una excelente idea.
              No, si al final el programa le vas a hacer tú.
              Saludos de nuevo y gracias.

              Comentario


              • #8
                No se te ocurra decir que el programa lo he hecho yo, porque todo el mundo (del foro) sabe que yo me quedé en VB6.0 y fui incapaz de dar el salto a .NET...
                José María Movilla Cuadrado
                ______________________
                Normas del foro
                www.foro.vb-mundo.com
                www.vb-mundo.com

                Comentario


                • #9
                  Perdón de nuevo por mi demora en la respuesta, pero la verdad es que he tenido un día un tanto complicado.
                  José María la solución que me aportas para evitar la entrada de gráficos no deseados funciona perfectamente. La hice un par de ajustes y sin problemas.
                  En cuanto a lo de pasarse a .NET yo tampoco lo he hecho. En este caso es que estando un día aburrido, me dio por instalar un VB NET que tenía en su estuche original y que había instalado hace tiempo por "enredar", pero nunca hice nada con él.
                  Mi mujer me pidió que la preparara algo para controlar su inmensa colección de gráficos y me dio la locura de intentarlo en .NET y en ello andamos.
                  Pero si tengo que reconocer que tus aportaciones me han ayudado mucho y me han ahorrado un montón de tiempo.
                  Así que gracias de nuevo y un fuerte abrazo.

                  Comentario


                  • #10
                    Pues, mira; la alegría me la das tú a mí, que llevo ya algún tiempo sin "trabajo" y me has permitido refrescarme y recordar que todavía uno sirve para algo... Abrazo fuerte.
                    José María Movilla Cuadrado
                    ______________________
                    Normas del foro
                    www.foro.vb-mundo.com
                    www.vb-mundo.com

                    Comentario

                    Trabajando...
                    X