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

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
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
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 :
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 :Pour plus d'informations sur la classe DateTimePicker , reportez-vous au site Web MSDN suivant :
Fuite de mémoire contrôle DateTimePicker

Avertissement : Cet article a été traduit automatiquement.

Propriétés

ID d'article : 813354 - Dernière mise à jour : 02/05/2014 14:09:03 - Révision : 1.5

Microsoft .NET Framework 1.0

  • kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbmemory kbgarbagecollect kbforms kbcode kbbug kbfix kbqfe kbnetframe100presp3fix KB813354 KbMtfr
Commentaires