Oprava: Při všimnout nevracení paměti při použití ovládacího prvku DateTimePicker v rozhraní .NET Framework 1.0

Překlady článku Překlady článku
ID článku: 813354 - Produkty, které se vztahují k tomuto článku.
Tento článek byl archivován. Je nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Pokud vytvoříte aplikaci pomocí rozhraní Microsoft .NET Framework verze 1.0 a použití ovládacího prvku DateTimePicker v aplikaci, můžete si všimnout nevracení paměti při spuštění aplikace.

Příčina

K tomuto problému dochází, protože kolekcí nesmyslné shromažďovat nepřístupné paměti. Ovládací prvek DateTimePicker je přidružen delegát Microsoft.Win32.UserPreferenceChangedEventHandler. Při vyřazení objektu ovládacího prvku DateTimePicker tento delegát není dereferenced. Proto tento delegát zabrání kolekcí nesmyslné shromažďování objekt ovládacího prvku DateTimePicker.

Řešení

Tento problém vyřešíte pomocí nejnovější aktualizace service pack pro rozhraní .NET Framework 1.0.

Chcete-li získat nejnovější aktualizaci service pack, naleznete na následujícím webu:
http://www.microsoft.com/downloads/details.aspx?familyid=6978D761-4A92-4106-A9BC-83E78D4ABC5B&displaylang=en

Prohlášení

Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt. Tento problém byl poprvé opraven aktualizací Microsoft .NET Framework 1.0 Service Pack 3.

Další informace

Kroky pro reprodukci tohoto chování

  1. Vytvoření aplikace Microsoft Windows. Postupujte takto:
    1. Spusťte aplikaci Visual Studio .NET.
    2. V nabídce soubor přejděte na příkaz Nový a klepněte na příkaz projekt. Zobrazí se dialogové okno Nový projekt.
    3. V části Typy projektu klepněte na položku Visual C# projekty.
    4. V části šablony klepněte na položku Windows aplikace.
    5. V poli název zadejte MyProject a potom klepněte na tlačítko OK. Ve výchozím nastavení je vytvořen formulář s názvem Form1.
    6. V nabídce Zobrazit klepněte na tlačítko panel.
    7. Přidat tři ovládací prvky textové pole do formuláře Form1. Ve výchozím nastavení jsou vytvořeny ovládací prvek TextBoxtextBox1, ovládací prvek TextBoxtextBox2 a ovládací prvky TextBoxtextBox3.
    8. Přidat dvě tlačítka řídí formulář Form1. Ve výchozím nastavení jsou vytvořeny ovládacího prvku tlačítkobutton1 a ovládacího prvku tlačítkobutton2.
    9. Přidejte následující kód Form1_Load obslužné rutiny události formuláře Form1.
      GC.Collect();
      GC.WaitForPendingFinalizers();
      long before = GC.GetTotalMemory(true);
      textBox1.Text ="Before test: " + before.ToString();
      GC.GetTotalMemory metoda načte počet bajtů, které jsou aktuálně přiděleny spravované paměti.
    10. Na formulář Form1 button1 poklepejte na ikonu a poté přidejte následující kód button1_Click obslužné rutiny události formuláře 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. Na formulář Form1 button2 poklepejte na ikonu a poté přidejte následující kód obslužné rutiny události button2_Click v formulář Form1.
      GC.Collect();
      GC.WaitForPendingFinalizers();
      long after = GC.GetTotalMemory(true);
      textBox2.Text = " After Garbage Collection: " + after.ToString();
      the IVsaEngine.Close metodu vynutí uvolnění paměti generace a pokusí se shromáždit všechny nepřístupné a dereferenced paměti.
    12. V nabídce soubor klepněte na příkaz Uložit vše uložit všechny soubory.
  2. Sestavit a potom spusťte aplikaci systému Windows. Postupujte takto:
    1. V nabídce vytvořit klepněte na příkaz Sestavit řešení.
    2. V nabídce Debug klepněte na tlačítko Start. Zobrazí se dialogové okno Form1. Počet bajtů, které jsou přiděleny spravované paměti se zobrazí v poli text textBox1.
    3. Klepněte na tlačítko button1.

      Aplikace vytvoří instance ovládacího prvku DateTimePicker v době spuštění a disposes ovládacího prvku DateTimePicker. Chování 100 časy. Počet bajtů ve spravované paměti po 100 výskytů se zobrazí v poli text textBox2. Uvolnění paměti kolekcí neshromažďuje umístění nepřístupné paměti.
    4. Klepněte na tlačítko button2.

    Počet bajtů, které zůstávají v paměti spravované po aplikace zavolá kolekcí uvolnění paměti se zobrazí v textovém poli textBox2. Můžete si všimnout, že většina nepřístupné paměti je stále v paměti spravované.
Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:
824684Popis standardní terminologie používané při popisu aktualizací softwaru společnosti Microsoft

Odkazy

Další informace o UserPreferenceChangedEventHandler delegáta, navštivte následující Microsoft Developer Network (MSDN) webu:
http://msdn2.microsoft.com/en-us/library/microsoft.win32.userpreferencechangedeventhandler(vs.71).aspx
Další informace o třídě DateTimePicker na webu služby MSDN:
http://msdn2.microsoft.com/en-us/library/system.windows.forms.datetimepicker(vs.71).aspx

Vlastnosti

ID článku: 813354 - Poslední aktualizace: 9. února 2014 - Revize: 1.5
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft .NET Framework 1.0
Klíčová slova: 
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbmemory kbgarbagecollect kbforms kbcode kbbug kbfix kbqfe kbnetframe100presp3fix KB813354 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:813354

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