REVISIÓN: Produce pérdida de memoria en una aplicación WPF cuando se hace referencia a un objeto brush utilizando un DynamicResource

Seleccione idioma Seleccione idioma
Id. de artículo: 2651992 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Síntomas

Tenga en cuenta la situación siguiente:
  • Crear una aplicación de Microsoft Windows Presentation Foundation (WPF) destinada a Microsoft.NET Framework 3.0 o Microsoft.NET Framework 3.5.
  • La aplicación define un objeto brush y un objeto de color en el archivo XAML de la aplicación.
    • El objeto brush se usa una DynamicResource Para hacer referencia al objeto color. Por ejemplo,
      <Application.Resources>
      
      <Color x:Key="color1">#ff4050ff</Color>
      
      <SolidColorBrush x:Key="brush1" Color="{DynamicResource color1}"/>
      
      </Application.Resources>
    • El objeto brush que se hace referencia como un DynamicResource en una ventana WPF o un control de usuario u otro objeto. Por ejemplo,
      <Window x:Class="WpfApplication6.Window1"
      
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      
      Title="Window1" Height="300" Width="300" Background="{DynamicResource brush1}">
      
      </Window>
  • Abrir o cerrar las instancias de la ventana o el control de usuario.

En este escenario, se tienen su raíz en la pila (GC) de recolección y no libera instancias. Con el tiempo, se produce una pérdida de memoria cuando se crean más y más instancias de la ventana o el control de usuario. Finalmente, recibirá una System.OutOfMemoryException excepción.

Nota Este problema no ocurre cuando la aplicación está orientada a Microsoft.NET Framework 4.

Causa

Este problema se produce porque el tiempo de ejecución WPF cables un controlador de eventos internos a la ResourceReferenceExpressionobjeto que está asociado con el recurso que está utilizando la ventana o el control de usuario. Esta referencia del controlador de eventos no se quita cuando el control de usuario o de la ventana está cerrada y establecer a null.

Solución

Información de la revisión

Ahora hay una revisión compatible de Microsoft. Sin embargo, se pretende corregir el problema que describe este artículo. Aplíquela sólo a sistemas que experimenten este problema específico.

Para resolver este problema, póngase en contacto con los servicios de soporte técnico de Microsoft para obtener la revisión. Para obtener una lista completa de los números de teléfono de servicios de soporte técnico de Microsoft e información acerca de los costos de soporte técnico, visite el siguiente sitio Web de Microsoft:
http://support.Microsoft.com/contactus/?ws=support
Nota En casos especiales, los costos derivados normalmente llamadas de soporte técnico pueden cancelarse si un profesional de soporte técnico de Microsoft determina que una actualización específica resolverá el problema. Se aplicarán los costos de soporte técnico usuales a las cuestiones y problemas que no reúnan los requisitos para la actualización en cuestión.

Requisitos previos

Para aplicar esta revisión, debe tener Microsoft.NET Framework 3.5.1 instalado en un equipo que está ejecutando uno de los sistemas operativos siguientes:
  • Service Pack 1 (SP1) de Windows 7
  • Windows Server 2008 R2 Service Pack 1 (SP1)


Requisito de reinicio

Debe reiniciar el equipo después de aplicar esta revisión si se utilizan los archivos afectados.

Información de archivo

La versión global de esta revisión tiene los atributos de archivo (u otros posteriores) que se enumeran en la tabla siguiente. Las fechas y horas de estos archivos se muestran en hora Universal coordinada (UTC). Al ver la información del archivo, se convierte en hora local. Para ver la diferencia entre la hora UTC y la hora local, utilice el Zona horaria ficha en la Fecha y hora elemento de Panel de Control.

Fo todos los admitidos x 86-versiones de Windows 7
Contraer esta tablaAmpliar esta tabla
Nombre de archivoVersión del archivoTamaño de archivoFechaTiempoPlataforma
PresentationFramework.dll3.0.6920.57385,283,84016-Dic-201101: 49x 86
WindowsBase.dll3.0.6920.57381,253,37616-Dic-201101: 49x 86
PresentationCore.dll3.0.6920.57384,218,88016-Dic-201101: 49x 86
PresentationFramework.dll3.0.6920.57385,283,84016-Dic-201101: 49x 86
Presentationhostdll.dll3.0.6920.5738131,36016-Dic-201101: 49x 86
PresentationHost.exe4.0.40305.0296,22416-Dic-201101: 49x 86
Presentationhostproxy.dll4.0.31106.0100,13616-Dic-201101: 49x 86
WindowsBase.dll3.0.6920.57381,253,37616-Dic-201101: 49x 86

Fo todos los admitidos en x 64 compatibles las versiones de Windows 7 y Windows Server 2008 R2
Contraer esta tablaAmpliar esta tabla
Nombre de archivoVersión del archivoTamaño de archivoFechaTiempoPlataforma
PresentationCore.dll3.0.6920.57383,998,72016-Dic-201101: 42x 64
PresentationFramework.dll3.0.6920.57384,640,76816-Dic-201101: 42x 86
Presentationhostdll.dll3.0.6920.5738172,32016-Dic-201101: 42x 64
PresentationHost.exe4.0.31106.0321,31216-Dic-201101: 42x 64
Presentationhostproxy.dll4.0.31106.0110,88816-Dic-201101: 42x 64
WindowsBase.dll3.0.6920.57381,114,11216-Dic-201101: 42x 86
PresentationFramework.dll3.0.6920.57385,283,84016-Dic-201101: 49x 86
WindowsBase.dll3.0.6920.57381,253,37616-Dic-201101: 49x 86
PresentationCore.dll3.0.6920.57384,218,88016-Dic-201101: 49x 86
PresentationFramework.dll3.0.6920.57385,283,84016-Dic-201101: 49x 86
Presentationhostdll.dll3.0.6920.5738131,36016-Dic-201101: 49x 86
PresentationHost.exe4.0.40305.0296,22416-Dic-201101: 49x 86
Presentationhostproxy.dll4.0.31106.0100,13616-Dic-201101: 49x 86
WindowsBase.dll3.0.6920.57381,253,37616-Dic-201101: 49x 86



Solución

Para evitar este problema, utilice uno de los métodos siguientes:
  • Utilice unStaticResource Para hacer referencia al objeto de color en el objeto brush. Por ejemplo, cambie la primera parte del código en el archivo XAML que se menciona en la sección "Síntomas" para el siguiente:
    <Color x:Key="color1">#ff4050ff</Color> 
    <SolidColorBrush x:Key="brush1" Color="{StaticResource color1}"></SolidColorBrush>
  • Establecer elx: compartido opción a false si el DynamicResource se utiliza. Por ejemplo, cambie la primera parte del código en el archivo XAML que se menciona en la sección "Síntomas" para el siguiente:
    <Application.Resources>
            <Color x:Key="color1">#ff4050ff</Color>
            <SolidColorBrush x:Key="brush1" x:Shared="False" Color="{DynamicResource color1}" />
        </Application.Resources>



Referencias

Para obtener más información acerca de la DynamicResource extensión de marcado, visite el siguiente sitio Web MSDN:
Información general acerca de la extensión de marcado DynamicResource
Para obtener más información acerca de los pinceles WPF, visite el siguiente sitio Web MSDN:
Información general acerca de los pinceles WPF

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Se refiere a:".

Propiedades

Id. de artículo: 2651992 - Última revisión: martes, 10 de enero de 2012 - Versión: 1.0
La información de este artículo se refiere a:
  • Microsoft .NET Framework 3.0
  • Microsoft .NET Framework 3.0 Service Pack 1
  • Microsoft .NET Framework 3.0 Service Pack 2
  • Microsoft .NET Framework 3.5
  • Microsoft .NET Framework 3.5 Service Pack 1
Palabras clave: 
kbqfe kbhotfixserver kbfix kbexpertiseadvanced kbsurveynew kbmt KB2651992 KbMtes
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): 2651992

Enviar comentarios

 

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