Je travaille sur un projet Tiff Viewer qui traite de gros fichiers tif couleur 24 bits (> 70MB). Voici le code que je charger le fichier TIF:tiff viewer application wpf à court de mémoire
TiffBitmapDecoder tbd = new TiffBitmapDecoder(new Uri(_strTiffPath),BitmapCreateOptions.DelayCreation, BitmapCacheOption.Default);
_frames = tbd.Frames;
J'utilise l'option de cache par défaut pour empêcher le chargement du fichier entier en mémoire.
Mon application a une vue de miniatures latérale (StackPanel vertical avec Image), et une vue de page qui affiche la miniature sélectionnée.
Je ne charger que les vignettes visibles par ce code:
internal static BitmapSource GetThumbAt(int i)
{
try
{
if (i >= _frames.Count)
return null;
BitmapFrame bf = _frames[i];
bf.Freeze();
return bf;
}
catch (Exception ex)
{
return null;
}
}
Mon problème est quand je faire défiler les vignettes voir pour charger les nouvelles pages visibles, la charge de la mémoire augmente et je tombe de mémoire!
J'ai essayé de décharger des pages invisibles (qui étaient déjà chargées) mais ça n'aide pas!
img.Source = null
Merci de m'avoir aidé à comprendre cela.
J'ai trouvé un article [ici] (http://code.logos.com/blog/2010/08/tracking_bitmapsource_memory_usage.html) parle de ce problème, mais je ne sais pas comment l'adapter à mon propre code. Une idée ? – hsnslh