est-il plus rapide pour créer ces objets de la classe ou structure?
Vous êtes la seule personne qui peut déterminer la réponse à cette question. Essayez les deux méthodes, une mesure significative, l'utilisateur ciblé, pertinent de mesure de performances, et alors vous saurez si le changement a un effet significatif sur les utilisateurs réels dans les scénarios.
Les structures de consommer moins de mémoire dans la mémoire (parce qu'ils sont plus petits et plus facilement compacté, non pas parce qu'ils sont "sur la pile"). Mais ils prennent plus de temps à copier qu'un exemplaire de référence. Je ne sais pas ce que vos indicateurs de performance sont pour l'utilisation de la mémoire ou de la vitesse; il y a un compromis à trouver ici, et vous êtes la personne qui sait ce que c'est.
est-il mieux de créer ces objets de la classe ou structure?
Peut-être de la classe, peut-être struct. Comme une règle de base: si l'objet est (1), (2) logiquement une valeur immuable, et (3) il y en a beaucoup alors je vous envisagez de faire une struct. Sinon, je collerais avec un type de référence.
Si vous avez besoin de muter certains champs d'une structure, il est généralement préférable de construire un constructeur qui renvoie une toute nouvelle structure avec l'ensemble de champs correctement. C'est peut-être un peu plus lent (le mesurer!) mais, logiquement, beaucoup plus facile de raisonner sur.
sont des objets sur le tas et la pile traité de la même façon par le garbage collector?
Non, ils ne sont pas les mêmes parce que les objets sur la pile sont les racines de la collection. Le garbage collector n'a pas besoin de demander "est-ce chose sur la pile en vie?" car la réponse à cette question est toujours "Oui, c'est sur la pile". (Maintenant, vous ne pouvez pas compter sur elle pour garder un objet vivant parce que la pile est un détail d'implémentation. La gigue est autorisé à introduire des optimisations que, disons, les enregister ce qui serait normalement une pile de valeur, et puis il n'est jamais sur la pile de sorte que le GC ne sait pas qu'il est encore vivant. Un enregistered objet peut avoir ses descendants recueillies de façon agressive, dès que le registre de s'y accrocher ne va pas être lu à nouveau.)
Mais le garbage collector n' ont à traiter des objets sur la pile en tant que vivant, de la même manière qu'il traite n'importe quel objet connu pour être vivant en tant que vivant. L'objet sur la pile peut se référer à allouées sur la pile des objets qui ont besoin d'être gardé en vie, de sorte que le GC a pour traiter la pile d'objets de la vie allouées sur la pile d'objets aux fins de la détermination du vivre ensemble. Mais, évidemment, ils sont pas traités comme des "objets vivants" pour l'application de compactage le tas, parce qu'ils ne sont pas sur le tas, en premier lieu.
Est-ce clair?