Update: Sie möglicherweise einen Speicherverlust bemerken, wenn Sie das DateTimePicker-Steuerelement in .NET Framework 1.0 verwenden

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 813354 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Wenn Sie eine Anwendung mithilfe von Microsoft .NET Framework, Version 1.0 erstellen und Sie das DateTimePicker -Steuerelement in der Anwendung verwenden, Sie möglicherweise einen Speicherverlust fest beim Ausführen der Anwendung.

Ursache

Dieses Problem rührt von der Garbage Collector nicht zugänglicher Speicher nicht erfasst wird. DateTimePicker -Steuerelement ist mit der Microsoft.Win32.UserPreferenceChangedEventHandler -Delegat verknüpft. Wenn Sie ein Objekt des DateTimePicker -Steuerelements verkaufen, wird dieser Delegat nicht dereferenziert. Daher verhindert dieses Delegaten die Garbage Collector erfasst das DateTimePicker -Steuerelement-Objekt.

Lösung

Installieren Sie das neueste Servicepack für .NET Framework 1.0, um dieses Problem zu beheben.

Um das neueste Servicepack zu erhalten, die folgende Microsoft-Website:
http://www.microsoft.com/downloads/details.aspx?familyid=6978D761-4A92-4106-A9BC-83E78D4ABC5B&displaylang=en

Status

Microsoft hat bestätigt, dass dies ein Problem in Microsoft-Produkten handelt, die im Abschnitt "Gilt für" aufgeführt sind. Dieses Problem wurde erstmals in Microsoft .NET Framework 1.0 Service Pack 3.

Weitere Informationen

Schritte zum Reproduzieren des Verhaltens

  1. Erstellen Sie eine Microsoft Windows-Anwendung. Gehen Sie hierzu folgendermaßen vor:
    1. Starten Sie Microsoft Visual Studio .NET.
    2. Zeigen im Menü Datei auf neu , und klicken Sie dann auf Projekt . Das Dialogfeld Neues Projekt angezeigt wird.
    3. Klicken Sie unter Projekttypen auf Visual C#-Projekte .
    4. Klicken Sie unter Vorlagen auf Windows-Anwendung .
    5. Geben Sie in das Feld Name MyProject und klicken Sie dann auf OK . Standardmäßig wird ein Formular, die mit dem Namen Form1 erstellt.
    6. Klicken Sie im Menü Ansicht auf Toolbox .
    7. Fügen Sie drei Textfeld -Steuerelemente auf das Formular Form1. Standardmäßig werden das textBox1 - TextBox -Steuerelement, das textBox2 - TextBox -Steuerelement und textBox3 TextBox -Steuerelement erstellt.
    8. Fügen Sie zwei Button -Steuerelemente hinzu das Formular Form1. Standardmäßig werden das Button -Steuerelement button1 und button2 Button -Steuerelements erstellt.
    9. Fügen Sie den folgenden Code hinzu der Form1_Load -Ereignishandler des Formulars Form1.
      GC.Collect();
      GC.WaitForPendingFinalizers();
      long before = GC.GetTotalMemory(true);
      textBox1.Text ="Before test: " + before.ToString();
      die GC.GetTotalMemory -Methode ruft die Anzahl der derzeit im verwalteten Speicher reservierten Bytes ab.
    10. Im Formular Form1 doppelklicken Sie auf button1 , und fügen Sie dann an den Button1_Click -Ereignishandler des Formulars Form1 den folgenden Code hinzu.
      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. Das Formular Form1 doppelklicken Sie auf button2 auf und fügen Sie den folgenden Code hinzu den Button2_Click -Ereignishandler in das Formular Form1.
      GC.Collect();
      GC.WaitForPendingFinalizers();
      long after = GC.GetTotalMemory(true);
      textBox2.Text = " After Garbage Collection: " + after.ToString();
      die GC.Collect -Methode erzwingt die Garbagecollection und versucht, alle nicht zugegriffen werden kann und dereferenzierter Speicher zu sammeln.
    12. Klicken Sie im Menü Datei auf Alles speichern , alle Dateien zu speichern.
  2. Erstellen Sie und führen Sie die Windows-Anwendung. Gehen Sie hierzu folgendermaßen vor:
    1. Klicken Sie im Menü Erstellen auf Erstellen Projektmappen .
    2. Klicken Sie im Menü Debuggen auf Starten . Das Dialogfeld Form1 angezeigt wird. Die Anzahl der Bytes, die im verwalteten Speicher reserviert wird in das Textfeld textBox1 angezeigt.
    3. Klicken Sie auf button1 .

      Die Anwendung erstellt eine Instanz des DateTimePicker -Steuerelements zur Laufzeit und des DateTimePicker -Steuerelements anschließend freigegeben. Dieses Verhalten tritt 100 Mal. Anzahl die Bytes im verwalteten Speicher nach 100 vorkommen wird im Textfeld textBox2 angezeigt. Die Speicherorte nicht zugänglicher Speicher wird von der Garbage Collector nicht erfasst.
    4. Klicken Sie auf button2 .

    Die Anzahl der Bytes, die im verwalteten Speicher, verbleiben nachdem die Anwendung der Garbage Collector aufgerufen werden im Text textBox2 angezeigt. Eventuell fällt Ihnen die meisten der nicht zugegriffen werden Speicher wird noch verwalteten Speicher.
Weitere Informationen finden Sie im folgenden um Artikel in der Microsoft Knowledge Base anzuzeigen: Artikel
824684Erläuterung von Standardbegriffen bei Microsoft Softwareupdates

Informationsquellen

Weitere Informationen zu der UserPreferenceChangedEventHandler -Delegat, finden Sie in der folgenden Microsoft Developer Network (MSDN)-Website:
http://msdn2.microsoft.com/en-us/library/microsoft.win32.userpreferencechangedeventhandler(vs.71).aspx
Weitere Informationen über die DateTimePicker -Klasse den folgenden MSDN-Website:
http://msdn2.microsoft.com/en-us/library/system.windows.forms.datetimepicker(vs.71).aspx

Eigenschaften

Artikel-ID: 813354 - Geändert am: Montag, 3. Februar 2014 - Version: 1.5
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft .NET Framework 1.0
Keywords: 
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbmemory kbgarbagecollect kbforms kbcode kbbug kbfix kbqfe kbnetframe100presp3fix KB813354 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 813354
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

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