L'utilisation de la mémoire augmente lorsque vous exécutez une application Visual Basic 2008 qui crée une instance d'une classe ou du Visual Basic 2005

Traductions disponibles Traductions disponibles
Numéro d'article: 919481 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Symptômes

Envisagez le scénario suivant :
  • Vous créez une application Microsoft Visual Basic dans Visual Studio 2005 ou Visual Studio 2008.
  • L'application Visual Basic contient une classe.
  • La classe contient un événement.
  • L'application Visual Basic crée une instance de la classe.
  • Vous compilez l'application Visual Basic en mode débogage.
Dans ce scénario, lorsque vous exécutez l'application Visual Basic, l'utilisation de la mémoire augmente.

note Il est plus probable que vous remarquez ce problème lorsque les conditions suivantes sont remplies :
  • L'application Visual Basic s'exécute en continu pendant une longue période.
  • L'application Visual Basic crée des nombreuses instances de la classe qui contient un événement. Si des instances sont créées suffisamment de temps, l'application finalement échoue avec une exception OutOfMemoryException ou « manque de mémoire « erreur. Par exemple, l'application Visual Basic contient une boucle qui crée des instances multiples de la classe.

Cause

Ce problème se produit car le modifier & continuer le débogage de fonctionnalité dans Visual Studio 2005 ou Visual Studio 2008 maintient une liste de faibles références aux objets qui ont été créés. Si l'objet qui a été créé est une classe qui contient un événement, ces références faibles sont conservées pendant toute la durée du programme. Ce comportement augmente l'utilisation de la mémoire.

Résolution

Pour résoudre ce problème, appliquez une des méthodes suivantes.

Méthode 1: redémarrer l'application Visual Basic

Vous pouvez redémarrer l'application Visual Basic. Lorsque vous faites cela, la mémoire est libérée.

Méthode 2: compiler l'application Visual Basic en mode de lancement

Vous pouvez compiler l'application Visual Basic en mode de lancement. Lorsque vous exécutez une application Visual Basic qui a été compilée en mode de lancement, l'utilisation de la mémoire n'augmente pas lorsque vous créez une instance d'une classe qui contient un événement.

Plus d'informations

Procédure pour reproduire le problème

  1. Démarrez Visual Studio 2005 ou Visual Studio 2008.
  2. Dans le menu Fichier , pointez sur Nouveau , puis cliquez sur projet .
  3. Sous types de projets , cliquez sur Visual Basic . Si vous ne voyez pas le type de projet Visual Basic, développez autres langues , puis cliquez sur Visual Basic .
  4. Sous modèles , cliquez sur application console .
  5. Tapez un nom de projet, puis cliquez sur OK .
  6. Remplacez tout le code dans la fenêtre code avec le code suivant.
    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
    
    Tandis que la valeur True CreateClassWithEvent() System.GC.Collect() System.GC.WaitForPendingFinalizers() Threading.Thread.Sleep(50) fin lors End Sub End module classe CLeak événement myEvent() End Class
  7. Dans le menu Déboguer , cliquez sur Démarrer le débogage .

Propriétés

Numéro d'article: 919481 - Dernière mise à jour: vendredi 27 mars 2009 - Version: 2.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • 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
Mots-clés : 
kbmt kbtshoot kbprb KB919481 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 919481
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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