Select the product you need help with
Se puede producir una pérdida de memoria cuando utiliza el enlace de datos en Windows Presentation FoundationId. de artículo: 938416 - Ver los productos a los que se aplica este artículo En esta páginaSíntomasCuando se utiliza enlace de datos en Microsoft Windows Presentation Foundation (WPF), se puede producir una pérdida de memoria. CausaEste problema ocurre cuando se cumplen las condiciones siguientes:
SoluciónPara evitar este problema, utilice uno de los métodos siguientes. Método 1Tener acceso a propiedad P a través de un objeto de DependencyProperty .Método 2Exponer la interfaz INotifyPropertyChanged en objeto X.Método 3Establecer el modo de enlace de datos a OneTime .EstadoEste comportamiento es por diseño. Más informaciónEn WPF, una operación de enlace de datos que no está marcada como OneTime debe escuchar las propiedad notificaciones de cambio del objeto de origen (objeto X). WPF usa las notificaciones de la clase DependencyProperties integradas o las notificaciones de la interfaz INotifyPropertyChanged . Si la clase DependencyProperties y la interfaz INotifyPropertyChanged no están disponibles, WPF usa el evento ValueChanged . Este comportamiento implica llamar al método PropertyDescriptor.AddValueChanged en el objeto PropertyDescriptor que corresponde a la propiedad P. Por desgracia, esta acción hace que common language runtime (CLR) crear una referencia fuerte a partir de este objeto a objeto de PropertyDescriptor X. CLR también mantiene una referencia al objeto PropertyDescriptor en una tabla global. Este comportamiento hace que una cadena de referencia en el orden siguiente:
Método de solución 1 y el método de solución 2 producir WPF utilice uno de los mecanismos de notificación preferido. Método de solución 3 indica a WPF no para escuchar las notificaciones de cambio. Todos los métodos de solución de tres evitar crear la referencia entre el objeto PropertyDescriptor y objeto X. En el ejemplo de código siguiente, se crean las condiciones de la pérdida. La primera condición en la sección "Causa" se cumple porque el objeto X hace referencia a los objetos secundarios del objeto X. Estos nodos secundarios incluyen el destino de enlace y el destino de enlace es el elemento TextBlock . La segunda condición en la sección "Causa" se cumple porque la propiedad P no es un objeto de DependencyProperty y objeto X no implementa la interfaz INotifyPropertyChanged . Este comportamiento hace que la clase UIElementCollection y el elemento TextBlock no liberarse. Además, la clase de contenedor StackPanel no se libera, ya que la clase UIElementCollection contiene una referencia a la clase de contenedor StackPanel . Este comportamiento se produce incluso si la clase UIElementCollection y elemento TextBlock se quitan del árbol principal mediante la línea siguiente de code: PropiedadesId. de artículo: 938416 - Última revisión: jueves, 26 de julio de 2007 - Versión: 1.1
Traducción automática IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente. Haga clic aquí para ver el artículo original (en inglés): 938416
(http://support.microsoft.com/kb/938416/en-us/
)
|




Volver al principio








