de MSDN sur le Différences entre l'ajout ou l'insertion d'un élément Le cache ASP.NET: P>
note forte>: les méthodes d'ajout et d'insertion ont la même signature, mais il y a Différences subtiles entre eux. Tout d'abord, appeler la méthode Ajouter renvoie un objet qui représente la élément mis en cache, tout en appelant insert pas fort>. Deuxièmement, leur comportement est différent si vous appelez ces méthodes et ajouter un article au cache qui est déjà stocké là-bas. L'insert la méthode remplace l'élément, tandis que le Ajouter une méthode échoue. [mettre l'accent sur le mien] p> blockQuote> La deuxième partie est facile. Aucune question à ce sujet. P>
Mais avec la première partie, pourquoi voudrait-il retourner un objet qui représente l'article mis en cache? Si j'essaie d'ajouter un article au cache, j'ai déjà / sache ce que cet article est? p>
Je ne comprends pas. Quel est le raisonnement derrière cela? P>
4 Réponses :
Il ne renvoie qu'un objet si le même objet était déjà stocké dans le cache ( sous une autre touche, je suppose frappe> sous la même clé). Sinon, il retourne null. La documentation est trompeuse: p>
http://msdn.microsoft .com / fr-US / bibliothèque / system.web.caching.cache.add.aspx p>
Le regardant dans le réflecteur, les deux méthodes semblent appeler la même méthode interne, d'ajouter le renvoi de l'ancien objet précédemment stocké sous la même clé et la méthode d'insertion ignore simplement cette valeur. P>
Mec, ça ne sonne pas juste :( Il ajoute un article si ce n'est pas là, sinon échoue i> (expection jetée ?? Je ne me souviens pas). Comment peut-on Renvoie le même objet, sous une autre clé ?? Cela n'a aucun sens ..
Cela ne signifie pas, mais il le dit dans la documentation "Valeur de retour: un objet si l'élément a été enregistré précédemment dans le cache; sinon, NULL référence (rien dans Visual Basic)." S'il échoue s'il y a déjà un objet mis en cache sous cette touche, comment peut-il dire qu'il renvoie un objet si cet objet est déjà mis en cache? Sous quelle clé? Encore une fois, je ne pense pas que cela se passe, alors la documentation n'a pas vraiment de sens ...
Si l'appel de la méthode d'ajout réussit à ajouter l'élément, il renvoie NULL. P>
Si la clé existe déjà dans le cache, la méthode renvoie un objet. Cependant, la documentation ne dit pas si elle renvoie l'objet que vous avez essayé de mettre dans le cache ou de l'objet déjà stocké dans le cache. P>
Logiquement, il doit renvoyer l'objet déjà dans le cache, car c'est la seule information interrectif. Vous avez déjà une référence à l'objet que vous essayez de mettre dans le cache. P>
Merci mate - maintenant ça a du sens :)
appeler ajouter () sur un cache appelle éventuellement une méthode interne avec cette signature: remarque l'objet Ceci est facilement vérifié avec le code suivant: p> OUT NUGLEOLOD code> - Ceci est défini sur l'objet que est actuellement dans l'emplacement "CacheKey" dans le cache et est renvoyé à la suite de Ajouter (). La documentation est trompeuse, ce n'est pas réellement le même objet em> qui est retourné - c'est l'objet que l'objet était à cet égard la même clé em>. p>
C'est ce qui a du sens et ce que j'ai présumé initialement ... il est possible de remplacer la valeur d'une clé et que l'ancienne valeur est renvoyée.
À l'affiche originale, c'est un moyen facile de vérifier si un objet mis en cache a été mis à jour ou non ...
Désolé, j'ai trouvé les commentaires de Kitsune déroutant. Ajouter () ne remplacera i> la valeur d'une clé (c'est ce que l'insert () fait). Au lieu de cela, add () reviendra a) la valeur mise en cache utilise déjà cette clé, ou b) null s'il n'y avait rien là-bas. Pour (a) il va jeter la valeur que vous essayiez d'ajouter.
Pour que cela soit encore plus clair, voici une application de console qui démontre le comportement fort> fort strong>: et la sortie de la console: p> Le "deuxième" appel à .add code> retourne ce qui est actuellement dans le cache sous notre clé et échoue pour mettre à jour l'entrée! strong> p> p>