17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

476<br />

Techniques avancées<br />

QUATRIÈME PARTIE<br />

était la préoccupation majeure des développeurs et la chasse au gaspi un exercice relativement<br />

fréquent.<br />

Pour les programmes actuels, ce problème est passé en second plan sauf pour des cas<br />

d’utilisation particuliers, où l’on peut légitimement se poser quelques questions :<br />

Quelle sera la taille occupée par un programme lorsque son nombre d’utilisateurs<br />

passera de 10 à 10 000 ?<br />

Quelle quantité de mémoire une fonction donnée a-t-elle besoin de consommer<br />

dans certaines conditions d’exécution ?<br />

Comment être sûr que le programme ne va pas dépasser dans certains cas le point<br />

de rupture mémoire, c’est-à-dire consommer toute la mémoire vive disponible et<br />

faire passer le système en swapping (utilisation du disque dur comme mémoire) et<br />

par ce biais faire chuter les performances ?<br />

Reproduire ces problématiques dans les tests unitaires est un bon exercice, à condition<br />

de disposer d’un outil de mesure de charge mémoire.<br />

Économie de mémoire<br />

Économiser la mémoire consiste à diminuer le plus possible le nombre d’objets créés,<br />

que ce soit par le biais de fonctionnalités du langage ou par des techniques de programmation.<br />

Bien souvent, le travail d’optimisation se fait au cas par cas, pour modifier<br />

la consommation mémoire d’un algorithme en modifiant son fonctionnement.<br />

Voici toutefois deux techniques qui peuvent s’appliquer pour réduire la taille<br />

mémoire d’une classe d’objets.<br />

__slots__<br />

Les __slots__ des new-style classes permettent une économie substantielle de<br />

mémoire sur les types de classes créés par le développeur, en modifiant le fonctionnement<br />

interne des accesseurs : l’attribut __dict__ habituellement utilisé pour conserver<br />

les éléments de chaque instance est retiré au profit d’un fonctionnement différent<br />

(voir chapitre 6).<br />

Attributs statiques<br />

Préférer les attributs statiques permet également de minimiser la taille mémoire prise<br />

par une classe d’objets, en essayant de partager au maximum les éléments communs<br />

entres les instances.<br />

Cette suppression de redondance, lorsqu’elle est possible, peut permettre des gains<br />

considérables de mémoire lorsqu’un type d’objet possède un nombre élevé d’instances.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!