Lors de la charge paresseux?
Je lazy load tous mes membres. J'ai fait cela pendant un certain temps et tout simplement pris le lazy load pour être une bonne chose à la valeur nominale.
Disons que nous avons
public class SomeClass
{
public int anInt;
public SomeReferenceType member1;
public SomeClass()
{
//initialize members in constructor when needed (lazy load)
anInt = new int();
member1 = new SomeReferenceType();
}
}
Qu'il ya des inconvénients à faire les choses de cette façon? Est-ce une bonne paresseux modèle de charge? Est-il judicieux de lazy load un type de valeur (avec moderne RAM fait même de la matière),?
D'après ce que j'ai appris de vos réponses, je voudrais savoir si il y a une différence entre ce qui précède et ce...
public class SomeClass
{
public int anInt;
public SomeReferenceType member1 = new SomeReferenceType();
public SomeClass()
{
}
}
L'exemple de code est impatient de chargement.
Je ne pense pas que l'initialisation dans le constructeur est le chargement paresseux.
Je ne pense pas que cela importe, mais regarder quand vous avez plusieurs constructeurs, si vous oubliez de mettre member1 = new balbal vous aurez nullreference lors de l'utilisation de la variable. Et btw, il n'est pas nécessaire d'utiliser de nouvelles int() je crois
Personnellement je n'utilise que le chargement paresseux si le chargement es vraiment trop cher et il est probable que les biens en question ne sera jamais utilisé.
Lazyloading est en cours de chargement lorsque nécessaire, et non pas lors de la création d'un objcect. Il n'est pas nécessaire de créer un nombre entier avec
Je ne pense pas que l'initialisation dans le constructeur est le chargement paresseux.
Je ne pense pas que cela importe, mais regarder quand vous avez plusieurs constructeurs, si vous oubliez de mettre member1 = new balbal vous aurez nullreference lors de l'utilisation de la variable. Et btw, il n'est pas nécessaire d'utiliser de nouvelles int() je crois
Personnellement je n'utilise que le chargement paresseux si le chargement es vraiment trop cher et il est probable que les biens en question ne sera jamais utilisé.
Lazyloading est en cours de chargement lorsque nécessaire, et non pas lors de la création d'un objcect. Il n'est pas nécessaire de créer un nombre entier avec
new
.OriginalL'auteur P.Brian.Mackey | 2011-10-13
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, l'initialisation d'un membre à l'intérieur du constructeur n'est pas un chargement différé.
Chargement différé est en cours d'initialisation du membre de la première fois qu'elle est demandée. Un exemple simple .NET (avec des double-vérifier le verrouillage afin de ne pas avoir de problèmes de threading):
Heureusement, si vous utilisez .NET 4, vous pouvez maintenant l'utilisateur le
Paresseux<T>
de la Classe qui gère les problèmes pour vous et rend les choses beaucoup plus facile.Deuxième de tous, le chargement paresseux est une bonne idée lorsque vous avez de nombreux membres, qui pourrait être coûteux pour charger et vous êtes sûr que vous allez être en utilisant l'ensemble de ces valeurs. Ce coût serait la cause du genre à être non-nécessairement lent à instancier.
Chargement paresseux juste pour le plaisir de lazy loading est d'ajouter une complexité inutile à votre code et peut causer des problèmes sur la route, si fait mal (quand on traite avec filetage, par exemple).
On oublie souvent effet secondaire courant de chargement différé (selon le contexte) est son effet sur l'expérience utilisateur. Parfois, lorsque vous vous attendez à charger quelque chose jusqu'à ce qu'un utilisateur a besoin d'elle, elle a des impacts négatifs sur la perception de la réactivité de l'application. Le profilage des métriques sont très précieux lors de la prise de décisions de ce genre.
OriginalL'auteur Justin Niessner
Ce n'est pas vraiment un chargement différé. C'est l'initialisation de la construction. Typiquement ce que l'on entend dans le lazy loading est de construire le point la première fois qu'il est référencé.
Il utilisé pour être l'un des moyens les charge Paresseux était un chèque,verrou,cochez la case afin de ne pas bloquer si elle est déjà créée, mais comme il est possible pour les deux éléments pour passer le vérifier et attendre que le verrouillage, vous vérifiez à nouveau dans la serrure:
Il y a différentes façons de le faire, en fait .NET 4.0, il y a un
Lazy<T>
type qui peut vous aider à faire thread-safe chargement différé facilement.Comme pour le pourquoi, généralement, lazy-loading est un bon système si l'objet de la création a tendance à être coûteux (de mémoire ou de temps) et il n'y a aucune garantie que vous aurez besoin. Si vous êtes raisonnablement sûr qu'il sera toujours utilisé, alors vous devriez juste à construire d'emblée.
SomeField
(qui est une propriété, pas un champ :-p) n'est jamais réellementnull
. Il est facile de concevoir un cas dans lequel le résultat d'un gros calcul peut véritablement êtrenull
et vous voulez être en mesure de stocker des.Oh, bien sûr, j'ai été tout simplement à l'aide d'un exemple simpliste. Pour certaines choses, la valeur null est une valeur acceptable. Mais généralement, dans ce cas, il n'y a pas besoin de beaucoup de lazy-load.
OriginalL'auteur James Michael Hare
À partir du code que je vois, vous ne faites pas le lazy load. Vous êtes membres de l'initialisation dans le constructeur, ce qui est toujours le cas et il arrive très tôt dans le cycle de vie de l'instance.
Donc, je me demandais, ce que n'est pas-chargement paresseux pour vous?
Chargement différé est généralement lorsque vous initialisez uniquement quelque chose lorsque vous y accédez.
Voici un exemple, à l'aide de .NET 4.0 Paresseux classe, qui vous aidera à faire exactement cela, le chargement paresseux:
Concernant fil-sécurité - vous pouvez passer un deuxième argument
LazyThreadSafetyMode
qui connaît deux façons de spécifier le fil de sécurité: l'Une dans laquelle l'exécution de la méthode d'initialisation peut se reproduire plusieurs fois, mais où tous les threads obtenir la valeur qui a été créé en premier, ou l'un où l'exécution est également protégé contre le fait d'être exécuté plusieurs fois.C'est simplement en cours d'initialisation. L'initialisation par défaut définit tous les champs d'instance par défaut (null pour les types référence, la valeur par défaut pour les types de valeur). Chargement différé explicitement signifie l'instanciation de qqch. le plus tard possible, ce qui est quand une ressource est accessible.
OriginalL'auteur flq
ce n'est pas le chargement paresseux.
chargement paresseux signifierait que vous venez de charger la valeur au moment de un véritable accès (ce qui ne marche pas passé dans l'initialiseur)
lazy loading est quelque chose comme ça:
SomeRef
est jamais réellementnull
. Il est facile de concevoir un cas dans lequel le résultat d'un gros calcul peut véritablement êtrenull
et vous voulez être en mesure de stocker des.OriginalL'auteur fixagon
Un vrai paresseux-chargé de propriété pour un int peut ressembler à quelque chose comme ceci:
Maintenant, si vous regardez cela, vous verrez que il y a une surcharge ici: Vous devez stocker la valeur dans un nullable (mémoire supplémentaire); cochez la case pour
null
à chaque accès, et de récupérer la valeur de la nullable à chaque accès.Si votre entier nécessite vraiment de très lourds calcul, puis cette construction du sens. Mais
new int()
n'est pas un lourd calcul, elle retourne0
. La surcharge est minuscule, mais si vous ajoutez cette surcharge de travail pour un même infimes (qui est à lire en entier), il ne fait aucun sens.OriginalL'auteur Timwi
Lazy loading est essentiel lorsque le coût de la création d'objet est très élevé et l'utilisation de l'objet est très rare. Donc, c'est le scénario où il vaut la peine de la mise en œuvre de chargement paresseux.
L'idée fondamentale de chargement différé pour objet de chargement/données si nécessaire
OriginalL'auteur Nikki
Lazy loading est un concept où l'on retarder le chargement de l'objet jusqu'à ce que le point où nous en avons besoin. La mise en mots simples, sur demande objet de chargement plutôt que de charger des objets inutilement.
Par exemple, considérons l'exemple ci-dessous où nous avons un simple Client de classe et de ce Client de classe a de nombreux objets d'Ordre à l'intérieur. Avez un oeil de près le constructeur de la classe de la Clientèle. Lorsque le Client de l'objet est créé, il charge également l'objet de Commande à ce moment-là. Donc, même si nous avons besoin ou pas, l'Ordre de l'objet, il est toujours chargé.
Lien pour Exemple
OriginalL'auteur Ali
décommenter la première boucle et voir la différence. très à l'aide de l'exemple de vertu deffred l'exécution et le chargement paresseux.
OriginalL'auteur RAGESH PUNATHIL