2012-02-24 16 views
7

Kontekst: Piszę aplikację internetową ASP.NET MVC 3. Mam List<MyObject> (właściwie kilka list) obiektów, które chcę przechowywać w pamięci podręcznej ze względu na przydatny automatyczny mechanizm wygaśnięcia i bezpieczeństwo wątków.Czy System.Web.Caching.Cache Usuwa obiekty usunięte z pamięci podręcznej?

Każdy z tych obiektów zawiera wewnętrznie instancję System.Threading.Semaphore używaną do wewnętrznej implementacji Push serwera.

Zastanawiam się, w jaki sposób zmieni się cykl życia moich obiektów, jeśli wstawię je do pamięci podręcznej? Może to powodować problemy z wątkami/NullReferenceExceptions, jeśli pamięć podręczna faktycznie udostępnia obiekty, które usuwa/etc.? Może inne oczywiste powody, by tego nie robić?

TIA.

Odpowiedz

9

Pamięć podręczna nie udostępnia jawnie obiektów, gdy są one wyrzucane z pamięci podręcznej z dowolnego powodu. Można to udowodnić poprzez testowanie, ale jeśli to było w przypadku byłoby to w dokumentacji, a to nie jest:

http://msdn.microsoft.com/en-us/library/system.web.caching.cache.aspx

cyklu życia obiektów w pamięci podręcznej może być przedłużony o bycie w pamięć podręczną, ponieważ pamięć podręczna odwołuje się do nich. Jeśli chcesz tego uniknąć, możesz zamiast tego buforować słabe odniesienie.

http://msdn.microsoft.com/en-us/library/system.weakreference.aspx

Jeśli tak to nie powinno być żadnych skutków cyklu życia przechowywania odniesienia w pamięci podręcznej.

Jedną z rzeczy do przemyślenia - mówisz, że chcesz używać pamięci podręcznej, ponieważ jest bezpieczna dla wątków. Należy pamiętać, że sam obiekt pamięci podręcznej jest bezpieczny dla wątków, ale jeśli buforujemy obiekt bezpieczny dla wątków w pamięci podręcznej, który nie spowoduje automatycznego wątku bezpieczeństwa samego obiektu buforowanego. W szczególności List<T> nie jest bezpieczny dla wątków i przechowywanie go w pamięci podręcznej tego nie zmieni. Użyj zbieżnych kolekcji, jeśli chcesz zapewnić bezpieczeństwo wątków.

+0

Dzięki za odpowiedź! Teraz czuję się nieco bardziej komfortowo. Nie mam nic przeciwko przedłużaniu cyklu życia - może nawet dodać punkty dla tego rozwiązania dla mnie. Jeśli w najbliższej przyszłości nie będzie więcej odpowiedzi, przyjmuję twoją odpowiedź. –

+3

Należy zauważyć, że w razie potrzeby można usunąć obiekty, określając metodę wywołania zwrotnego usuwania. – Rozwel

+0

@Rozwel: Dzięki, rozumiem to. Chciałem tylko zapewnić coś przeciwnego - obiekty nie zostaną automatycznie usunięte. –

Powiązane problemy