CORRECTIF : vous pouvez remarquer une fuite de mémoire lorsque vous utilisez le contrôle DateTimePicker dans .NET Framework 1.0

Traductions disponibles Traductions disponibles
Numéro d'article: 813354 - Voir les produits auxquels s'applique cet article
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
Agrandir tout | Réduire tout

Sommaire

Symptômes

Si vous créez une application à l'aide de Microsoft .NET Framework version 1.0, et que vous utilisez le contrôle DateTimePicker dans l'application, vous pouvez remarquer une fuite de mémoire lorsque vous exécutez l'application.

Cause

Ce problème se produit parce que le garbage collector ne recouvre pas la mémoire n'est pas accessible. Le contrôle DateTimePicker est associé le délégué Microsoft.Win32.UserPreferenceChangedEventHandler . Lorsque vous cédez d'un objet du contrôle DateTimePicker , ce délégué est déréférencé pas. Par conséquent, ce délégué empêche le nettoyage de la collecte de l'objet de contrôle DateTimePicker .

Résolution

Pour résoudre ce problème, procurez-vous le dernier service pack pour .NET Framework 1.0.

Pour obtenir le dernier service pack, reportez-vous au site de Web Microsoft suivant :
http://www.microsoft.com/downloads/details.aspx?familyid=6978D761-4A92-4106-A9BC-83E78D4ABC5B&displaylang=en

Statut

Microsoft a confirmé que c'est un problème dans les produits Microsoft répertoriés dans la section « S'applique à ». Ce problème a été corrigé dans le Microsoft .NET Framework 1.0 Service Pack 3.

Plus d'informations

Procédure pour reproduire le problème

  1. Créer une application Microsoft Windows. Pour ce faire, procédez comme suit :
    1. Démarrez Microsoft Visual Studio .NET.
    2. Dans le menu Fichier , pointez sur Nouveau , puis cliquez sur projet . La boîte de dialogue Nouveau projet s'affiche.
    3. Sous types de projets , cliquez sur projets Visual C# .
    4. Sous modèles , cliquez sur application Windows .
    5. Dans la zone Nom , tapez MyProject et puis cliquez sur OK . Par défaut, un formulaire est nommé Form1 est créé.
    6. Dans le menu Affichage , cliquez sur boîte à outils .
    7. Ajouter trois contrôles de zone de texte au formulaire Form1. Par défaut, le contrôle de zone de texte zone de texte 1 , le contrôle de zone de texte textBox2 et le contrôle de zone de texte textBox3 sont créés.
    8. Ajoutez deux contrôles Button dans le formulaire Form1. Par défaut, le contrôle de bouton button1 et le contrôle de bouton button2 sont créés.
    9. Ajoutez le code suivant au gestionnaire d'événements Form1_Load du formulaire Form1.
      GC.Collect();
      GC.WaitForPendingFinalizers();
      long before = GC.GetTotalMemory(true);
      textBox1.Text ="Before test: " + before.ToString();
      la méthode GC.GetTotalMemory récupère le numéro d'octets actuellement alloués dans la mémoire gérée.
    10. Sur le formulaire Form1, double-cliquez sur button1 et puis ajoutez le code suivant au gestionnaire d'événements Button1_Click du formulaire Form1.
      long after;
      for (int i=0; i<100; i++) 
      {
      DateTimePicker dtp=new DateTimePicker();	
      dtp.Dispose();
      dtp=null;
      }
      after = GC.GetTotalMemory(true);
      textBox2.Text = " After test: " + after.ToString();
    11. Sur le formulaire Form1, double-cliquez sur button2 et ajoutez ensuite le code suivant au gestionnaire d'événements button2_Click dans le formulaire Form1.
      GC.Collect();
      GC.WaitForPendingFinalizers();
      long after = GC.GetTotalMemory(true);
      textBox2.Text = " After Garbage Collection: " + after.ToString();
      la méthode GC.Collect force le nettoyage et essaie de collecter toutes les la mémoire n'est pas accessible et déréférencée.
    12. Dans le menu Fichier , cliquez sur Enregistrer tout pour enregistrer les fichiers.
  2. Créer, puis exécutez l'application Windows. Pour ce faire, procédez comme suit :
    1. Dans le menu Générer , cliquez sur Créer solution .
    2. Dans le menu Déboguer , cliquez sur Démarrer . La boîte de dialogue Form1 s'affiche. Le nombre d'octets sont alloués dans la mémoire gérée s'affiche dans la zone de texte zone de texte 1 .
    3. Cliquez sur button1 .

      L'application crée une instance du contrôle DateTimePicker au moment de l'exécution et puis détruit du contrôle DateTimePicker . Ce problème se produit 100 fois. Le nombre d'octets dans la mémoire gérée après 100 occurrences s'affiche dans la zone de texte textBox2 . Le garbage collector ne collecte pas les emplacements de mémoire n'est pas accessible.
    4. Cliquez sur button2 .

    Le numéro d'octets qui restent dans la mémoire gérée que l'application appelle le garbage collector s'affiche dans la zone de texte textBox2 . Vous pouvez remarquer que la plupart du inaccessible mémoire est toujours en mémoire managée.
Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
824684 Description de la terminologie standard est utilisée pour décrire les mises à jour logicielles Microsoft

Références

Pour plus d'informations sur le délégué UserPreferenceChangedEventHandler , consultez le MSDN (Microsoft Developer Network) suivant site :
http://msdn2.microsoft.com/en-us/library/microsoft.win32.userpreferencechangedeventhandler(vs.71).aspx
Pour plus d'informations sur la classe DateTimePicker , reportez-vous au site Web MSDN suivant :
http://msdn2.microsoft.com/en-us/library/system.windows.forms.datetimepicker(vs.71).aspx

Propriétés

Numéro d'article: 813354 - Dernière mise à jour: mercredi 5 février 2014 - Version: 1.5
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft .NET Framework 1.0
Mots-clés : 
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbmemory kbgarbagecollect kbforms kbcode kbbug kbfix kbqfe kbnetframe100presp3fix KB813354 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: 813354
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.

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