Astuce : Sérializer un tableau d'object, quel type de tableau choisir?
Comme celà fait quelques temps que je n'ai pas posté sur le développement je vais vous faire part ici d'une petite étude que je viens de faire concernant la sérialisation binaire de tableaux d'object.
Tout d'abord de quoi parle-ton?
Imaginer dans une application que vous ayez besoin de stocker des données de types trés variés (ou inconnu au moment de la conception : dans une library par exemple). Vous avez la possibilité d'utilisé principalement trois types :
- List<object>
- ArrayList
- object[]
Les deux premiers ayant l'avantage d'être dynamique (il est possible de rajouter/enlever des éléments à souhaits)
Mettons maintenant que pour une raison x ou y, vous aillez besoin de sérializer binairement votre tableau. Je pense qu'un des facteurs de choix pourra alors être la taille de l'objet une fois sérialisé. Notamment si celui-ci doit être transmit par le réseau par exemple.
J'ai donc réalisé un petit bench pour mesurer la taille prise par des tableaux de dimensions identique (et contenant les mêmes données).
Voici le tableau récapitulatif (données affichées en octets) :
| | 4 els. | 16 els. | 64 els. | 256 els. | 1024 els. | 2048 els. |
| List<object> | 236 | 524 | 932 | 2564 | 9092 | 17796 |
| ArrayList | 137 | 425 | 833 | 2465 | 8993 | 17696 |
| object[] | 59 | 347 | 755 | 2387 | 8915 | 17619 |
On peut donc noter que :
List<object> prend 99 octets de plus que ArrayList, ArrayList prend 78 octets de plus que object[]. Et enfin List<object> prend 177 octets de plus que object[].
Bien entendu ce facteur n'est pas le seul à prendre en compte de la cadre de la conception d'un logiciel. Il faut aussi tenir compte des coûts en temps pour le traitement et l'utilisation des différents types en fonction de leurs contraintes.
Sur ce, Happy Coding!
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :