Downsampling ou comment bien optimiser le code

Soyez le premier à donner votre avis sur cette source.

Vue 5 862 fois - Téléchargée 654 fois

Description

Salut,
je dépose une source qui contient une unité très optimisée sur laquelle vous pouvez jeter un coup d'oeil et ainsi voir ce que le mot "optimisation" veut dire. Au préalable de la lecture du code je recommande la lecture de mes deux tutoriels sur Scanline et les pointeurs ainsi que la lecture du tutorial de Caribensila sur l'optimisation du code en Delphi (Tactiques d?'optimisation de la vitesse d'execution du code) si vous n'êtes pas à l'aise avec les pointeurs et l'optimisation.

Une fois ceci fait, vous pouvez considérer cette source comme un exemple "taille réelle" et si vous vous sentez d'attaque vous pouvez même tenter d'optimiser encore davantage ! Faites-m'en part si vous y parvenez, qu'on puisse mettre à jour le code.

Le code est commenté et davantage d'informations sont disponibles en commentaires au début de l'unité Downsampling.pas.

Au fait, bien que le code soit optimisé l'interface graphique du programme est assez lente, c'est dû au Trackbar qui ne notifie ses changements que tous les X secondes. Ne pas se fier à l'interface graphique, elle n'est là que pour office d'exemple et pour avoir une capture - c'est le code qui est intéressant.

Ne pas oublier que l'optimisation n'est pas simplement une question de vitesse - le code doit rester lisible et relativement simple, il n'est pas toujours nécessaire de sortir l'assembleur lourd pour aller plus vite (d'autant plus que l'assembleur est difficile à lire, même pour un initié).

Source / Exemple :


// Dans le zip

Conclusion :


Tous commentaires, critiques, remarques, etc ... sont les bienvenus.

Codé sous Delphi 6 Personal, devrait marcher sous toutes les versions supérieures à Delphi 2 normalement (pas sûr pour Delphi 2010).

Cordialement, Bacterius !

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Salut ManChesTer, en fait seul la partie qui prend du temps est optimisée. Le reste comme le chargement de l'image ... bon. Mais on peut cdertainement l'optimiser, en effet comme tu le montres dans ton commentaire.

Et un try, oui, ça en a pas l'air mais ça ne prend pas plus de temps d'exécuter du code protégé par un try - il y a juste un flag quelque part qui dit au compilateur que tel code doit s'éxécuter à tout prix ou que telle exception doit être redirigée.

Cordialement, Bacterius !
Messages postés
378
Date d'inscription
vendredi 20 octobre 2000
Statut
Modérateur
Dernière intervention
11 décembre 2013

Salut Bacterius,

Bon code mais il est encore possible de l'optimisée

par exemple dans main :
# JPG := TJPEGImage.Create;
# JPG.LoadFromFile('Image.jpg');
# Bmp := TBitmap.Create;
# Bmp.Assign(JPG);
# Bmp.PixelFormat := pf32bit;
# Bmp2 := TBitmap.Create;
# JPG.Free;
me fais des frissons dans le dos,
un with TJPEGImage.Create do
...

dans la lib le try , c'est optimisé ca un try ?

Bon Coding...

ManChesTer.
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Admettons :p

"Mais, de toute façon, plus la capacité des RAMs augmente chez les utilisateurs, plus les programmeurs les remplissent. C'est bien connu ! lol"
Eh oui, je sais même pas quoi faire des mes 4Go, j'ai l'impression de gaspiller :(

Cordialement, Bacterius !
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13
Quand tu programmeras un dessin animé avec quelques milliers de Bitmaps, tu changeras peut-être d'avis. :)

Mais, de toute façon, plus la capacité des RAMs augmente chez les utilisateurs, plus les programmeurs les remplissent. C'est bien connu ! lol
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Merci, ça sera bien utile pour le pf24bit ! :) Mais bon il reste un petit problème - les PC d'aujourd'hui sont tellement rapides que la différence entre 24 et 32 bits est négligeable - en fait le 32 bits irait plus vite à cause justement de l'alignement mémoire.

Je vais l'ajouter comme exercice et pour compatibilité, mais ça n'a que peu d'intérêt au niveau pratique (tous les bitmaps sont en 32 bits de nos jours).

Cordialement, Bacterius !
Afficher les 12 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.