CacheItemRemovedCallback - Event

16/03/2009 - 10:13 von Frank Lehmann | Report spam
Hallo NG,

ich arbeite mit VB2005 und hàtte gern mal etwas zum
Cache-Objekt gewusst. Bei Cache.Insert oder .Add kann man
ja einen Callback-Delegaten angeben, der aufgerufen wird,
wenn das Framework ein Objekt aus dem Cache entfernt,
also z.B. eine Eventroutine
Private Sub OnCacheRemove(ByVal key As String, ByVal val As Object, _

ByVal reason As CacheItemRemovedReason)

die in vielen MSDN-Beispielen vorkommt.

Die Frage ist: Wenn diese Routine aufgerufen wird, ist dann
das Cache-Objekt bereits entfernt oder wird es erst entfernt,
*nachdem* die Routine verlassen wurde?

Der Parameter reason As CacheItemRemovedReason,
wie er im MSDN genannt wird, suggeriert, dass das
Objekt bereits beim Aufruf der Routine entfernt ist
(...Removed..., genauso wie der Delegat CacheItemRemovedCallback),
aber wenn ich in der Routine die Collection über alle Cache-Objekte
iteriere, dann ist das Objekt, das mit Parameter key As
String gemeldet wird, sehr wohl noch da.

Wenn es tatsàchlich erst nach Verlassen der Routine entfernt
wird, dann sind doch wohl alle Code-Beispiele sinnlos,
die in dieser Routine das entfernte Cache-Objekt mit Cache.Insert
wieder einfügen, um es zu "retten". Denn .Insert fügt es nur ein,
wenn es nicht schon da ist, und nach Verlassen der Routine wird
das Objekt, was noch da ist, entfernt.
D.h., wenn ein Cache-Objekt abgelaufen ist, gibt es keine Möglichkeit,
es wiederzubeleben.

Ist meine Überlegung richtig so?

Dank an alle, die helfen wollen.

Gruß
Frank Lehmann
 

Lesen sie die antworten

#1 Lutz Elßner
16/03/2009 - 12:20 | Warnen spam

Die Frage ist: Wenn diese Routine aufgerufen wird, ist dann
das Cache-Objekt bereits entfernt oder wird es erst entfernt,
*nachdem* die Routine verlassen wurde?

Der Parameter reason As CacheItemRemovedReason,
wie er im MSDN genannt wird, suggeriert, dass das
Objekt bereits beim Aufruf der Routine entfernt ist
(...Removed..., genauso wie der Delegat CacheItemRemovedCallback),
aber wenn ich in der Routine die Collection über alle Cache-Objekte
iteriere, dann ist das Objekt, das mit Parameter key As
String gemeldet wird, sehr wohl noch da.




Es kann sein, dass das Objekt (der Verweis darauf) aus dem Cache schon
entfernt ist, aber der Routine noch als Parameter übergeben wird.
So kann man den Verweis dem Cache wieder hinzu fügen um es zu retten.

Im Zweifel hilft probieren, und bei mir ist es lange her, deshalb weiß ich
es nicht mehr ganz genau.

Lutz

Ähnliche fragen