Vider ou desactiver le cache (Bitmap caching)
Bonjour à tous.
J'ai un très gros problème avec la gestion des images dans Silverlight. Il utilise le bitmap caching quand on souhaite afficher une image du net. Mais ce cache ne se vide apparement jamais.
Mon appli est une visionneuse de photo stockées en BDD et accesible via un Httphandler (du style
Code:
http://localhost/Test/MonImage.axd?id=456
). Les photos sont donc mis en cache.
Résultat: lenteurs et au final out of memory.
Donc ma question est comment désactiver ce cache sous Silverlight (car la méthode classique sous WPF ne fonctionne pas car BitmapImage n'est pas la même classe)?
Solution encore plus simple
Citation:
Envoyé par
arasium
Je vois que ma question ne trouve pas de reponse. Voici donc ce que j'ai trouvé. Dans la MSDN, il est dit que des que l'on utilise une Uri comme source pour une image, Silverlight utilise le Bitmap Caching. L'autre moyen de définir une source est par Stream.
La solution es donc de faite un HttpWebRequest en asynchrone et récuper la stream de response. Ainsi pas de problème de cache.
Je met le tag résolue car je propose une solution de contournement. Maintenant, si quelq'un à la solution, je prend.
Ayant été confronté au même problème je vous remercie pour cette solution.
Voici une variante encore plus simple en Silverlight (l'utilisation du WebClient) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
try
{
var wc = new WebClient();
wc.OpenReadCompleted += (_s, _e) =>
{
if (_e.Error == null)
{
int lengthInBytes = Convert.ToInt32(_e.Result.Length);
var br = new BinaryReader(_e.Result);
var buffer = new byte[lengthInBytes];
using (br)
{
for (int i = 0; i < lengthInBytes; i++)
{
buffer[i] = br.ReadByte();
}
}
var rawBytesStream = new MemoryStream(buffer);
var img = new BitmapImage();
img.SetSource(rawBytesStream);
image.Source = img;
}
};
wc.OpenReadAsync(new Uri(adresse, UriKind.Absolute));
}
catch (Exception)
{
} |