Estoy usando .NET 4.5 en Windows 7 y podría encontrar una pérdida de memoria.
Tengo un TextBlock (no TextBox , no es el problema Deshacer), que cambia su valor cada segundo (uso de CPU, tiempo, etc.).
Usando .NET Memory Profiler (y simplemente mirando el administrador de tareas) noté que la memoria sigue creciendo. Para ser más precisos, veo más y más instancias en vivo de UnmanagedMemoryStream (probé GC.Collect() que obviamente no hizo nada).
Después de algunas pruebas, descubrí que este problema aparece solo cuando configuro la fuente TextBlock en una fuente de recursos de la siguiente manera:
<Style TargetType="{x:Type TextBlock}"> <Setter Property="Control.Foreground" Value="#CCCCCC"/> <Setter Property="FontFamily" Value="pack://application:,,,/MyUIControls;component/./Fonts/#Noto Sans"/> </Style> Intenté actualizar la propiedad Text directamente desde el código o mediante Binding, se comporta de la misma manera en ambos sentidos.
Línea de fondo:
Cuando se establece FontFamily , las instancias de UnmanagedMemoryStream siguen llegando (para siempre) cada vez que actualizo el texto. Cuando no lo hago (configuro la propiedad FontFamily ), la memoria es estable.
(Por cierto, sucede cuando uso Label en lugar de TextBlock también)
Parece una pérdida de memoria, pero no pude encontrar ninguna referencia al respecto.
¿Alguna sugerencia de cómo se puede solucionar?
Una FontFamily UnmanagedMemoryStreams se usa si se obtuvo de un recurso incrustado o una ruta relativa. Cuando FontFamily proviene de una fuente del sistema o una ruta absoluta, no se filtra.
Puedes mirar aquí y descargar el proyecto que reproduce el problema.
Solución alternativa : para fuentes de recursos: guarde las fuentes en una carpeta temporal y use la ruta absoluta a la fuente almacenada. Para fuentes de ruta relativa: resuelva y use la ruta absoluta en su lugar.