J'ai été chargé de créer une application qui fonctionne avec des milliers d'images, beaucoup trop à charger dans la RAM en même temps. Je suppose que c'est quelque peu analogue à une visionneuse de photos comme Picassa, en ce qu'à tout moment l'application n'a besoin des données de pixels que d'une poignée des images cataloguées. L'application doit également gérer des images extrêmement volumineuses, où seul un petit sous-ensemble des données de pixels serait réellement requis à un moment donné pour l'analyse ou l'affichage d'images, ce qui, je suppose, est quelque peu analogue à Google Earth. En bref, l'application doit charger de manière dynamique uniquement la partie des données de pixel qui est réellement requise à un moment donné. Ayant traité uniquement avec le chargement d'image statique typique des bibliothèques d'images comme OpenCV, CImg, ou Magick ++, je suis un peu à la perte comment je pourrais le mieux aborder le problème. Ma question est donc la suivante: existe-t-il des modèles de conception standard pour cette exigence, ou des approches pour résoudre ce problème (ou un problème similaire)? Par contre, pour les petites images, je me rends compte que je pouvais simplement retarder le chargement de l'image jusqu'à ce que ce soit nécessaire, mais il y a deux problèmes clés qui me viennent à l'esprit avec cette approche. (1) Cela ne résout pas le problème de grande image. (2) Puisque le déchargement de l'image immédiatement après son utilisation pourrait être inefficace, j'aurais besoin d'un gestionnaire de gestion de mémoire dans l'application qui ne décharge les images que lorsque de nouvelles images sont chargées et qu'un certain seuil de mémoire a été dépassé. Il est clair qu'un problème de gestion de la mémoire similaire reste pour les parties d'une image plus grande chargée en mémoire. Je reconnais clairement qu'un tel outil est au-delà de mes connaissances et de mon expérience, donc si c'est la réponse dominante à cette question, alors j'ai une question complémentaire. Quelqu'un pourrait-il recommandé quelques tutoriels de base sur la gestion de la mémoire?Existe-t-il des modèles standard pour implémenter une classe pour charger dynamiquement des images?
Merci pour votre aide! MISE À JOUR: Pour ceux qui sont curieux, j'ai pensé partager l'approche que j'ai prise. La classe d'image que j'ai créée paresseuse charge les données d'image. Pour résoudre le problème avec le chargement de milliers d'images, j'ai créé une classe qui garderait une trace des handles de fichiers (Windows a une limite - voir _getmaxstdio), et la quantité de mémoire d'image chargée, en déchargeant si nécessaire. Pour gérer de très grandes images, j'ai utilisé la bibliothèque d'images VXL comme back-end, qui est capable de charger une sous-section d'une grande image. Certes, ce n'est pas très efficace pour certaines images (images compressées en particulier), mais comme je travaille principalement avec des images TIFF en mosaïque, cela fonctionne très bien.
Il est connu comme la mise en cache. – ruslik
En fait, la mise en cache est exactement le contraire de ce dont cette personne a besoin. –
La mise en cache utilise peu de mémoire rapide pour accélérer l'accès à une grande quantité de mémoire lente. Dans ce cas, la mémoire principale et lente serait le disque dur, et la RAM serait la plus rapide. Mise en cache est également choisir ce qu'il faut garder à proximité et ce qu'il faut jeter – ruslik