Uso StreamResourceInfo.Stream
para obtener BitmapImage
s de recursos. ¿Es correcto Close
y Dispose
el flujo después de usarlo? Lo pregunto porque en el generador de perfiles de memoria, me sale un error si lo hago. El generador de perfiles de memoria dice que una instancia eliminada no ha sido codificada.Eliminar StreamResourceInfo.Stream
Si miro en la web, solo puedo encontrar la publicación this sobre este tema. En esta publicación, la persona que responde dice que es malo deshacerse de ella. Sin embargo, si miro las circunstancias y el efecto, no creo que esto sea correcto. ¿Alguien sabe cuál es la acción correcta?
Información adicional: En los ejemplos de msdn que he visto, no eliminan ni cierran.
Editar
Gracias a la respuesta de Rick Sladkeys, he encontrado la solución: asigno StreamResourceInfo.Stream
a la StreamSource
-property del BitmapImage
. En msdn se escribe:
Establezca la propiedad CacheOption en BitmapCacheOption.OnLoad si desea cerrar la secuencia después de crear BitmapImage. La opción de caché OnDemand predeterminada conserva el acceso a la transmisión hasta que se necesite el mapa de bits, y el recolector de basura se encarga de la limpieza.
Esto significa que BitmapImage
toma la propiedad de la transmisión. Y es por eso que el generador de perfiles de memoria muestra un error si cierro/elimino la secuencia manualmente: Bitmap mantendrá una referencia a la secuencia (BitmapCacheOption OnDemand) y, por lo tanto, GC no la liberará mientras BitmapImage sea válida, pero la transmisión ya es explícita dispuesto. En este ejemplo específico, deshacerse es una mala idea.
Para la completness, también busqué en msdn el ejemplo del enlace de arriba donde se llamó TextRange.Load
. Para Load
, es lo opuesto, Load
no toma la propiedad y, por lo tanto, el flujo debe cerrarse/desecharse después del acabado.
'Dispose' en transmisiones llamadas' Cerrar' internamente. (O en realidad normalmente al revés) –
@Albin: Sí, soy consciente de esto. AFAIK aquí Cerrar llamadas Eliminar. Pero esta no es la pregunta. La pregunta es si incluso se desea cerrar/desechar el flujo específico. En el msdn-examples no lo hacen y si miro el resultado, dudo que esto sea previamente/esperado. Pero gracias de cualquier manera. – HCL