Oui, la dernière ligne est une instruction cast. Le casting a un coût associé mais il est insignifiant par rapport au coût de la sérialisation. Je doute qu'il apparaisse même sur un profiler.
Pensez à ce que la sérialisation implique.
- traitement d'un flux d'octets
- Création de types en fonction des métadonnées
- Conversion entre tableaux d'octets et les types de données
Chacune de ces opérations sont beaucoup plus cher qu'une opération de coulée unique.
EDIT Pourquoi cela nécessite-t-il un moulage?
Il y a plusieurs raisons à cela. La première est que les API de désérialisation n'ont aucun moyen de savoir quel est le type du flux d'octets avant de l'inspecter. Le seul choix de l'API en termes de type de retour dans les métadonnées est donc Object. Deuxièmement, la désérialisation doit supporter littéralement n'importe quel type sérialisable. Pour fonctionner, il doit choisir un type de retour pour la méthode applicable à tous les types qui peuvent être sérialisés. Le seul type disponible qui répond à cela est l'objet.
Merci Jared. La raison pour laquelle je me demandais est parce que je veux utiliser la sérialisation pour mon système de fichiers de sauvegarde dans mon application, mais les fichiers peuvent contenir des millions d'objets. Savez-vous pourquoi cela nécessite une distribution? c'est à dire. pourquoi n'est-il pas sûr de type? –
@Joan nécessite une conversion, car le moteur de désérialisation ne connaît pas le type avant de lire les données sous-jacentes. De plus, l'API existe depuis avant les génériques, elle a donc été obligée de renvoyer un objet en tant que type. – JaredPar
Merci Jared, bon à savoir. Alors est-il possible d'avoir un sérialiseur qui retourne le type sans casting? –