2009-09-11 8 views
0

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?

+0

Voulez-vous ajouter un tag pour la langue dans laquelle vous faites cela? – DisplacedAussie

+0

Je crois que c'est un langage agnostique. –

Répondre

1

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.

+0

+1 pour mentionner les types de référence. –

+0

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

+0

Tant que vous ne créez pas d'instance, ce sera juste un seul IntPtr. –

0

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.

+0

On dirait que j'ai un peu mal compris la question. Ça ne fait rien :) – cwap

Questions connexes