Nevracení paměti může dojít při použití datové vazby ve Windows Presentation Foundation

Překlady článku Překlady článku
ID článku: 938416 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Při použití vázání dat v systému Windows Presentation Foundation (WPF), může dojít k nevrácení paměti.

Příčina

K tomuto problému dochází, pokud jsou splněny následující podmínky:
  • Cesta vázání dat odkazuje na vlastnost P objektu X.
  • Objekt X obsahuje odkaz na přímý nebo nepřímý odkaz na cíl operace vazba na data.
  • Vlastnost P Otevírá Popisovač PropertyDescriptor objekt namísto Vlastnost DependencyProperty objekt nebo PropertyInfo objekt.

Jak potíže obejít

Chcete-li tento problém vyřešit, použijte jednu z následujících metod.

Metoda 1

Vlastnost přístup P prostřednictvím Vlastnost DependencyProperty objekt.

Metoda 2

Vystavit INotifyPropertyChanged rozhraní objektu X.

Metoda 3

Nastavit režim vazby na data Jednorázově.

Prohlášení

Toto chování je záměrné.

Další informace

Ve WPF, operace vázání dat, která není označena jako Jednorázově musí přijímat oznámení o změně vlastností ze zdrojového objektu (objekt X). WPF používá vestavěné upozornění DependencyProperties třídy nebo sdělení INotifyPropertyChanged rozhraní.

Pokud DependencyProperties Třída a INotifyPropertyChanged rozhraní není k dispozici, použije WPF ValueChanged událost. Toto chování se týká volací PropertyDescriptor.AddValueChanged Metoda na Popisovač PropertyDescriptor objekt, který odpovídá vlastnosti P. Bohužel tato akce způsobí, že společného jazykového modulu runtime (CLR) vytvořit silné odkaz z tohoto Popisovač PropertyDescriptor objekt do objektu X. CLR také udržuje odkaz na Popisovač PropertyDescriptor objekt global tabulky. Toto chování způsobuje řetězec odkazů v následujícím pořadí:
  1. Tabulka globálních
  2. Na Popisovač PropertyDescriptor objekt
  3. Objekt X
  4. Cíl vázání dat

    Poznámka: Odkaz mezi objektem x a cílové datové vazby je způsobena první podmínku, která je uvedena v části "Příčina".
  5. Vazba
Jako cíl vázání dat používá, vazba musí nadále přijímat změny. Toto chování ponechá naživu mezi odkaz Popisovač PropertyDescriptor objektu a objekt X, a cíl zůstává v použití. Toto chování způsobuje nevracení paměti v objektu X a každý objekt, pro který objekt X odkazuje. Mezi tyto objekty patří cílové datové vazby.

Metoda řešení 1 a řešení 2 způsobit WPF použít jednu z mechanismů upřednostňovaný oznámení. Metoda řešení 3 pokyn WPF není pro příjem oznámení o změně. Všechny tři řešení metody předejít vytvoření odkazu mezi Popisovač PropertyDescriptor objektu a objekt X.

V následujícím příkladu kódu jsou vytvořeny podmínky pro nevracení paměti.
<Label Name="MyLabel">
   <Stack Panel Name="MyStackPanel">
      <TextBlock Text="{Binding ElementName=MyStackPanel, Path=Children.Count}" />
   </StackPanel>
</Label>
V tomto příkladu kódu Počet Vlastnost představuje vlastnost P. Kromě toho objektu X je reprezentována UIElementCollection třídy v podobě StackPanel.Children Vlastnost.

Protože je splněna první podmínka v části "Způsobit" objektu X odkazuje na objekt na děti X. Tyto děti patří vazbu cílového a cíl vazby TextBlock prvek.

V části "Způsobit" druhou podmínku je splněna, protože vlastnost P není Vlastnost DependencyProperty objektu a objekt X neimplementuje INotifyPropertyChanged rozhraní. Toto chování způsobuje, že UIElementCollection Třída a TextBlock prvek není uvolněna. Navíc StackPanel Kontejner třídy není uvolněna, protože UIElementCollection Třída obsahuje odkaz StackPanel Kontejner třídy. K tomuto chování dochází i v případě, UIElementCollection Třída a TextBlock prvek jsou odebrány z hlavního stromu pomocí následující řádek kódu:
MyLabel.Content = <Some New Content>;

Vlastnosti

ID článku: 938416 - Poslední aktualizace: 22. května 2011 - Revize: 3.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft .NET Framework 3.0
Klíčová slova: 
kbtshoot kbprb kbmt KB938416 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:938416

Dejte nám zpětnou vazbu

 

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