Disons que vous avez une classe d'utilisateurs. Lorsque l'utilisateur est connecté, il y a des propriétés représentant les informations de base de l'utilisateur, une adresse associée et, disons, 5 images de profil, le dernier un lsit générique comme ceci: Private _photos As List (Of Photo). Cependant, au lieu de porter le poids des images de profil dans une session vairable, pour réduire l'utilisation des ressources, je veux seulement les peupler si l'utilisateur a besoin d'y accéder. Donc, pour la plupart, la liste générique des photos est vide. Sera-t-il porteur de poids de toute façon? J'essaie de décider si je ne devrais pas le peupler si nécessaire, ou si je devrais créer une autre classe d'utilisateur "light" qui n'a pas cette propriété.Les propriétés «lourdes» ont-elles un poids, même si elles ne sont pas remplies?
Répondre
Si les propriétés "lourdes" utilisent un type référencé qui sera alloué sur le tas et que l'allocation n'est pas effectuée tant qu'elles ne sont pas nécessaires, elles auront très peu de temps système. Dans la plupart des langues, le surdébit sera spécifique à la plate-forme et généralement égal à la taille d'une adresse mémoire (c'est-à-dire une longueur de pointeur unique, typiquement 32 bits ou 64 bits par propriété). Par exemple, il semble que vous utilisiez VB.NET. Le surcoût de List (Of T) sera minime jusqu'à ce que vous commenciez à ajouter des éléments. Ensuite, vous prenez le coup pour chaque élément. La liste va allouer un tampon initial de pointeurs, donc vous obtiendrez un pointeur pour la liste (32/64bit), et un tableau pour contenir des pointeurs, mais aucun n'est rempli. En général, vous ne parlez pas d'une grande quantité de la mémoire.
Si, toutefois, les propriétés sont un type de valeur (cela dépend un peu de la langue), elles peuvent être allouées directement dans votre classe. Cela peut entraîner des frais généraux élevés dans tous les cas. Cependant, il est peu probable que ce soit le cas, car le fait d'avoir des objets "lourds" en tant que types alloués par la valeur/pile est un mauvais concept pour commencer.
+1 pour mentionner les types de référence. –
Merci pour votre aide. Cet objet Photo est en fait une classe que j'ai moi-même construite. C'est un type de référence mais il a des propriétés, dont certaines sont des types de valeur, dont certains sont des types de référence. Donc, je ne suis pas sûr de la façon dont la classe elle-même est traitée. – donde
Tant que vous ne créez pas d'instance, ce sera juste un seul IntPtr. –
En supposant que vous stockez les chemins dans une base de données RDB, le temps d'aller-retour pour demander des propriétés à la demande risque d'être plus important que de simplement les demander à chaque fois. Cependant, vous devez regarder votre utilisation: Est-ce que ce sera 9 fois sur 10 qu'ils ont besoin du chemin ou 1/10? Essayez-le dans les deux sens dans un mini-projet, puis faites-le profiler. C'est l'une de ces périodes où il n'y a pas de «bonne» réponse.
On dirait que j'ai un peu mal compris la question. Ça ne fait rien :) – cwap
- 1. Pourquoi les propriétés ne sont pas déclarables dans les interfaces
- 2. Pourquoi les énumérations ne sont-elles pas itératives?
- 3. Quand les propriétés hal sont-elles mises à jour?
- 4. Mise à jour des propriétés remplies uniquement
- 5. MS CRM 4.0. FetchXML renvoie les colonnes même si elles sont vides
- 6. javac ne compile pas le code Java, même si les pots sont présents et disponibles
- 7. Pourquoi les requêtes WMI sont-elles si lentes parfois?
- 8. Si j'ai une page de contrôle d'utilisateur en ligne, les propriétés de propriétés publiques sont-elles sur le contrôle?
- 9. Pourquoi mes dates ne sont-elles pas triées correctement?
- 10. Pourquoi mes pages ne sont-elles pas encore gzippées?
- 11. (Simple) Les propriétés HTML peuvent-elles être des attributs ou sont-elles uniquement pour CSS?
- 12. Pourquoi mes prises ne sont-elles pas toutes exécutées?
- 13. GetLocalValueEnumerator() Ne pas retourner toutes les propriétés
- 14. Pourquoi deux méthodes ne peuvent-elles pas être déclarées avec la même signature même si leurs types de retour sont différents?
- 15. VSTS DB GDR - Pourquoi les références ne sont-elles pas résolues dans la même base de données?
- 16. Pourquoi les instructions SQL sont-elles si longues lorsqu'elles sont "limitées"?
- 17. Pourquoi les classes comme BindingList ou ObservableCollection ne sont-elles pas sûres pour les threads?
- 18. Quand deux colonnes qui se ressemblent ne sont-elles pas les mêmes en oracle?
- 19. Pourquoi les variables d'environnement de registre visuel ne sont-elles pas définies avec Windows Explorer?
- 20. Thèmes mal, les peaux sont-elles bonnes?
- 21. Pourquoi les chaînes Windows Forms sont-elles si moche lorsqu'elles sont anti-aliasées?
- 22. Les constantes de chaîne sont-elles surestimées?
- 23. Ruby CSV « illégale citant », même si les guillemets sont échappés
- 24. Assert.AreEqual échoue même si attendu et réel sont les mêmes
- 25. Comment puis-je fusionner 2 objets javascript, en remplissant les propriétés dans un si elles n'existent pas dans l'autre?
- 26. Les identifiants de mysql sont-ils garantis, même si les lignes sont supprimées?
- 27. Les chaînes StringBuilder sont-elles immuables?
- 28. Les événements Global.asax ne sont pas déclenchés
- 29. Pourquoi les données de mon formulaire html ne sont-elles pas soumises?
- 30. Les sessions ColdFusion ne sont pas dépassées
Voulez-vous ajouter un tag pour la langue dans laquelle vous faites cela? – DisplacedAussie
Je crois que c'est un langage agnostique. –