Uso de memoria aumenta cuando se ejecuta un Visual Basic 2005 o una aplicación de Visual Basic 2008 que crea una instancia de una clase

Seleccione idioma Seleccione idioma
Id. de artículo: 919481 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Síntomas

Tenga en cuenta la situación siguiente:
  • Crear una aplicación de Microsoft Visual Basic en Microsoft Visual Studio 2005 o en Visual Studio 2008.
  • La aplicación de Visual Basic contiene una clase.
  • La clase contiene un evento.
  • La aplicación de Visual Basic crea una instancia de la clase.
  • Compilar la aplicación de Visual Basic en modo de depuración.
En este escenario, cuando ejecute la aplicación de Visual Basic, uso de memoria aumenta.

Nota Es más probable que observe este comportamiento cuando se cumplen las condiciones siguientes:
  • La aplicación de Visual Basic se ejecuta continuamente durante un largo período de tiempo.
  • La aplicación de Visual Basic crea muchas instancias de la clase que contiene un evento. Si las instancias se crean suficientes veces, la aplicación, finalmente, se producirá un error con una OutOfMemoryException o "memoria insuficiente" error. Por ejemplo, la aplicación de Visual Basic contiene un bucle que crea varias instancias de la clase.

Causa

Este problema se produce porque el editar y continuar, depuración en Visual Studio 2005 o en Visual Studio 2008 característica mantiene una lista de referencias débiles a objetos que se han creado. Si el objeto que se ha creado es una clase que contiene un evento, estas referencias débiles se mantienen para la duración del programa. Este comportamiento aumenta el uso de memoria.

Solución

Para resolver este problema, utilice cualquiera de los métodos siguientes.

Método 1: Reiniciar la aplicación de Visual Basic

Puede reiniciar la aplicación de Visual Basic. Al hacerlo, se libera la memoria.

Método 2: Compilar la aplicación de Visual Basic en modo de lanzamiento

Puede compilar la aplicación de Visual Basic en modo de lanzamiento. Cuando ejecuta una aplicación de Visual Basic que se compiló en modo de lanzamiento, uso de memoria no aumenta cuando crea una instancia de una clase que contiene un evento.

Más información

Pasos para reproducir el problema

  1. Inicie Visual Studio 2005 o Visual Studio 2008.
  2. En el menú archivo , seleccione nuevo y, a continuación, haga clic en proyecto .
  3. En tipos de proyecto , haga clic en Visual Basic . Si no ve el tipo de proyecto de Visual Basic, expanda Otros idiomas y, a continuación, haga clic en Visual Basic .
  4. En plantillas , haga clic en Aplicación de consola .
  5. Escriba un nombre de proyecto y, a continuación, haga clic en Aceptar .
  6. Reemplace todo el código en la ventana código con el código siguiente.
    Module Module1
    
      Private Sub CreateClassWithEvent()
        Dim TestClass As New CLeak
      End Sub
    
      Sub Main()               
        ' This loop infinitely creates a class that contains an event.
        While True
          CreateClassWithEvent()
          System.GC.Collect()
          System.GC.WaitForPendingFinalizers()
          Threading.Thread.Sleep(50)
        End While
      End Sub
    
    End Module
    
    Class CLeak
      Event myEvent()
    End Class
    
  7. En el menú Depurar , haga clic en Iniciar la depuración .

Propiedades

Id. de artículo: 919481 - Última revisión: viernes, 27 de marzo de 2009 - Versión: 2.0
La información de este artículo se refiere a:
  • Microsoft Visual Studio 2008 Standard Edition
  • Microsoft Visual Studio 2008 Professional Edition
  • Microsoft Visual Studio 2005 Team System Architect Edition
  • Microsoft Visual Studio 2005 Team System Developer Edition
  • Microsoft Visual Studio 2005 Team System Test Edition
  • Microsoft Visual Studio 2005 Team System Team Foundation:
  • Microsoft Visual Studio 2005 Standard Edition
  • Microsoft Visual Studio 2005 Professional Edition
  • Microsoft Visual Studio 2005 Express Edition
  • Microsoft Visual Basic 2005
Palabras clave: 
kbmt kbtshoot kbprb KB919481 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 919481

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com