c# - bueno - borrar memoria cache windows 10
¿Cómo liberar caché/memoria de imagen en Windows Phone 8? (1)
Es importante establecer en su clase de convertidor
BitmapImage image = new BitmapImage();
image.DecodePixelType = DecodePixelType.Logical;
image.CreateOptions = BitmapCreateOptions.BackgroundCreation;
image.CreateOptions = BitmapCreateOptions.DelayCreation;
image.DecodePixelWidth = 56;
image.DecodePixelHeight = 100;
En mi aplicación Windows Phone 8 tengo una página con un LongListSelector
que está vinculado a una lista de 1000 objetos que tienen una propiedad para base64string
para la imagen. Ahora para mostrar la imagen, escribí este convertidor para convertir el bas64string
en una stream
.
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (!value.ToString().Contains("http://"))
{
string str = value.ToString();
byte[] bytes = Converter.FromBase64String(str);
using (MemoryStream stream = new MemoryStream(bytes))
{
stream.Seek(0, SeekOrigin.Begin);
BitmapImage image = new BitmapImage();
image.SetSource(stream);
bytes = null;
var memoryusage = string.Format("Memory: {0} bytes",
DeviceExtendedProperties.GetValue("ApplicationCurrentMemoryUsage"));
Debug.WriteLine(memoryusage);
return image;
}
}
else
{
return null;
}
}
Y este es el recuerdo:
Memory: 92549120 bytes Memory: 92946432 bytes Memory: 92946432 bytes Memory: 92946432 bytes Memory: 92946432 bytes Memory: 93192192 bytes Memory: 93192192 bytes Memory: 96079872 bytes Memory: 100700160 bytes Memory: 100700160 bytes Memory: 109568000 bytes Memory: 111734784 bytes Memory: 142852096 bytes Memory: 143056896 bytes Memory: 143056896 bytes Memory: 143261696 bytes Memory: 140791808 bytes Memory: 141103104 bytes Memory: 141529088 bytes Memory: 142151680 bytes Memory: 146784256 bytes Memory: 146784256 bytes Memory: 155066368 bytes Memory: 156368896 bytes
En la memoria equivale a, o quizás algunos bytes, más de este 156368896 bytes, la aplicación se bloquea con EngineExecutionException
. Una vez que obtuve "OutOfMemoryException para esto:
image.SetSource(stream);
Obviamente esto es un problema de memoria. Necesito limpiar la memoria caché de la imagen, pero ¿cómo? Veo el enlace en esta respuesta https://stackoverflow.com/a/12267163/1949475 , pero no puedo usarlo.
Nota: no todas las imágenes se muestran al mismo tiempo, y la aplicación toma tanta memoria después de que regrese y vuelva a la página cambiando los datos que se mostrarán en el LongListSelector.