L’optimisation de l’imagerie d’image de batch est essentielle pour les applications élevées (catalogues de commerce électronique, galeries, feeds). Aspose.Imaging pour .NET vous permet de charger, de redémarrer et de coder des images efficacement tout en gardant votre code entièrement géré et cross-platform. ci-dessous sont les étapes pratiques pour rendre votre pipeline de batterie rapide, stable et prévisible.

Exemple complet

Étape 1 : Choisissez une stratégie de recouvrement appropriée

Choisissez une stratégie qui correspond à vos limites de sortie:

  • ** Boîte de limitation (recommandée pour les miniatures):** Utiliser FitInto Les images s’adaptent à l’intérieur targetWidth × targetHeight sans distorsion (la proportion d’aspect est maintenue).
  • **Grandeur absolue (pixels exacts): **Utilisez une régression totale si les consommateurs ont besoin de dimensions fixes (pourraient être perturbées si le rapport d’aspect diffère).
  • ** Scalage de pourcentage:** Handy pour la descente uniforme à partir de tailles différentes (par exemple, 50% de l’original).

Tip: Pour les réseaux de magasin et les cartes sociales, FitInto Il s’agit généralement du défaut le plus sécurisé.

Étape 2 : Contrôle de la mémoire et du caching

Aspose.Imaging soutient le caching configurable, de sorte que les gros lots ne dépassent pas la RAM :

  • Préférez caching sur disque pour les grands emplois (path supporté par SSD).
  • Configurez la dossier cache et la taille du budget avant le traitement.
// Configure once at startup (example values)
Aspose.Imaging.Cache.CacheType   = Aspose.Imaging.Cache.CacheType.CacheOnDisk;
Aspose.Imaging.Cache.CacheFolder = @"D:\imaging-cache";
Aspose.Imaging.Cache.CacheSize   = 1L * 1024 * 1024 * 1024; // 1 GB

Et aussi :

  • Disposez à chaque Image Dès qu’il est sauvé.
  • Évitez de garder plusieurs images décodées en vie à la fois – processus par fichier.

Étape 3 : Parallèlez en toute sécurité

Utiliser Parallel.ForEach (comme dans le Gist), mais tonne-le :

  • Sélection MaxDegreeOfParallelism à une valeur sensible pour votre boîte (cores CPU, vitesse I/O, cabine de mémoire).
  • Chaque tâche doit fonctionner sur sa propre ** Image Ne partagez pas les objets d’image à travers les filets.
  • Gardez vos options d’encodage immuables pour éviter les contentieux.
  • Guide : * Commencez par MaxDegreeOfParallelism = Environment.ProcessorCount Adapter après le profilage.

Étape 4: Choisissez les codes et la qualité délibérément

  • Pour les sorties JPEG, tonner la taille du fichier contre la qualité en utilisant JpegOptions.Quality (point doux typique: 75–90).
  • Pour les actifs nécessitant une transparence ou un rendement sans perte, utilisez PngOptions au lieu.
  • Gardez le format de sortie cohérent par cas d’utilisation (par exemple, JPEG pour les photos, PNG pour l’actif UI).

Étape 5: Défaillances de courts circuits; Gardez le batch en mouvement

Plongez chaque fichier dans un essai/catch (comme vous l’avez fait) et enregistrez la voie + exception.

  • Télécharger les fichiers non-image (filter les extensions en avant).
  • Logage des dimensions d’origine et de sortie pour valider les économies.
  • Écrire des échecs dans un CSV pour les re-runs.

Étape 6 : l’hygiène

  • Assurez-vous que le catalogue de sortie existe et est sur un disque rapide ** (SSD).
  • Évitez d’écrire la sortie sur les entrées; écrire dans un catalogue séparé.
  • Si vous avez des millions de fichiers, partagez les sorties dans les sous-follers pour garder les listes de directory rapides.

Étape 7 : Vérifier les résultats avec un examen de santé rapide

Après la reprise :

  • Valider la largeur / hauteur contre vos objectifs.
  • Confirmez le type de fichier/extension correspond à l’encoder utilisé.
  • Point-check qualité visuelle pour les cas de bord courants (panoramas, petits icônes, PNG transparents).

Les meilleures pratiques (Checklist)

    • Cache : * Sélection CacheType, CacheFolderEt un raisonnable CacheSize.
  • ** Parallèlement : ** Utilisation Parallel.ForEach avec tuné MaxDegreeOfParallelismPas partagé Image les cas.
    • Disponible : * Toujours disponible Image et rapidement.
    • Encoder : * Utiliser JpegOptions.Quality pour JPEG ; changement à PngOptions pour la perte / alpha.
  • I/O: Les racines d’entrée et de sortie séparées; les directories pré-créées.
  • Filtration: Limitez les extensions d’image connues avant le chargement.
  • Logging: Enregistrement d’échecs et métrics de base (compte, MB en/out).
  • ** Mise à jour: ** Gardez Aspose.Imagination actualisée pour les améliorations de performance en cours.

More in this category