57 votes

L'utilisation de Serializable sous Android est-elle incorrecte?

J'ai lu beaucoup de messages et d'articles vantant la vitesse de Parcelable sur Serializable. J'ai été en utilisant à la fois pour transmettre des données entre des Activités par les Intentions, et n'ont pas encore de remarquer une différence de vitesse lors de la commutation entre les deux. La quantité type de données que j'ai de transfert est de 5 à 15 objets imbriqués avec 2 à 5 champs de chacun.

Depuis que j'ai environ 30 classes qui doivent être transférables, la mise en œuvre de Parcelable nécessite beaucoup de code réutilisable qui ajoute le temps de maintenance. Un de mes exigences actuelles est aussi que le code compilé doit être aussi petite que possible; j'espère que je pourrais gagner un peu d'espace en utilisant Serializable sur Parcelable.

Dois-je utiliser Parcelable ou il n'y a pas de raison de l'utiliser sur Serializable pour de si petites quantités de données? Ou est-il une autre raison pour laquelle je ne devrais pas utiliser Sérialisable?

68voto

hackbod Points 55292

Pour l'utilisation en mémoire, Parcelable est beaucoup, beaucoup mieux que Serializable. Je recommande fortement de ne pas utiliser Serializable.

Vous ne pouvez pas utiliser Parcelable pour les données qui seront stockées sur le disque (parce qu'il n'a pas de bonnes garanties quant à la cohérence des données lorsque les choses changent), cependant Serializable est assez lent, que je vous demande instamment de ne pas l'utiliser non plus. Vous êtes mieux d'écrire les données vous-même.

Aussi, l'un des problèmes de performances avec Serializable est qu'il se termine à tourner à travers beaucoup d'objets temporaires, causant beaucoup de l'activité GC dans votre application. C'est assez odieux. :}

58voto

Charles Points 295

Continuer à utiliser la Sérialisation. Vous verrez beaucoup de gens en ligne qui vous diront que la Sérialisation est très lent et inefficace. Qui est correct. Mais, une chose que vous ne voulez jamais à faire en tant que programmeur, c'est de prendre tout commentaire à propos de la performance comme un absolu.

Demandez-vous si la sérialisation est le ralentissement de votre programme vers le bas. Avez-vous un avis quand il passe d'une activité à l'? Avez-vous un avis lorsqu'il enregistre/charges? Si non, c'est bien. Vous n'obtiendrez pas une plus petite empreinte, quand vous allez à beaucoup de manuel code de sérialisation, donc il n'y a aucun avantage là. Alors, si c'est 100 fois plus lent qu'un autre, si 100 fois plus lent signifie 10ms au lieu de 0,1 ms? Vous n'allez pas le voir, alors qui s'en soucie? Et, pourquoi serait-on investir effort massif dans l'écriture de manuel de la sérialisation de 30 classes quand il ne fera aucune différence perceptible dans la performance?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X