2011-12-29 17 views
6

Próbowałem przeczytać na Caching w ASP.NET i nadal mam kilka pytań.Czy buforowanie w języku C# jest odpowiednie dla mnie?

  1. Podczas korzystania z Sql Zależność Cache ... Wiem, że można określić, które tabele będą monitorowane ale jeśli zmiana dzieje któregokolwiek z tych tabel to zresetować całą pamięć podręczną? Rozumiem, że nie chcę buforować tabel, które często się zmieniają, ale możemy skończyć z dobrą garstką buforowanych tabel, a nawet jeśli każda tabela otrzyma tylko kilka aktualizacji dziennie, co może zmienić się w 50-te resetowanie pamięci podręcznej codziennie (okno 8-godzinne).

  2. Chciałbym tworzyć i utrzymywać tę pamięć podręczną za pośrednictwem biblioteki DLL GAC. Wiele różnych aplikacji będzie uzyskiwać dostęp do tego GAC w dowolnym momencie. Czy każda aplikacja zachowuje własną kopię pamięci podręcznej lub jest przechowywana w jednej lokalizacji globalnej (lub prawdopodobnie w puli aplikacji)?

  3. Czy na serwerze znajduje się fizyczna lokalizacja, w której mogę sprawdzić, ile miejsca zajmuje obecnie pamięć podręczna? Byłoby to niezwykle istotne, gdyby każda aplikacja utrzymywała swoją własną pamięć podręczną, ponieważ mogłoby to spowodować pobranie dużej ilości miejsca na dysku.

  4. Czy istnieje sposób fizycznego wymuszenia buforowania, aby sam się odbudować? Widziałem, jak mój szef zakładał, że pamięć podręczna jest winna za konkretny problem i potrzebuję go wykluczyć na najwyższym poziomie. Nie „zmienia zapis i mówiąc, że powinien odbudować cache”, ale raczej „robić [akcji X] i wiedząc, że cokolwiek zostało w pamięci podręcznej jest teraz gone”

Z góry dziękuję za odpowiedzi i czasu.

+0

Podnosisz interesujące problemy, ale nie jestem do końca pewien, w jaki sposób odnosi się do tytułu Twojego pytania. –

+0

i do C# tag .. –

+0

2 przeraża mnie .... – Phill

Odpowiedz

2
  1. SqlCacheDependency monitoruje tylko tabele w SQL 2000 podejścia w starym stylu, która opiera się na wyzwalacze i odpytywania. Metoda SQL 2005+ monitoruje zmiany na poziomie wiersza i używa Service Broker. Na poziomie obiektu pamięci podręcznej zmiany unieważnią tylko wpisy pamięci podręcznej powiązane z daną SqlCacheDependency (nie całą pamięć podręczną).

  2. Każda aplikacja ma osobną kopię pamięci podręcznej. Jeśli masz wiele aplikacji udostępniających te same dane, możesz rozważyć utworzenie osobnego "serwera buforującego", a Twoje aplikacje będą pobierać z niego dane za pomocą WCF - po prostu dodaj kolejną warstwę do swojej aplikacji.

  3. Można spojrzeć na kilka liczników wydajności związanych z pamięcią podręczną, ale jeśli problem dotyczy miejsca na dysku, to nie ma się czym martwić, ponieważ pamięć podręczna ASP.NET jest przechowywana w całości w pamięci RAM. Ponadto, jeśli pamięć RAM jest zbyt pełna, jedną z funkcji pamięci podręcznej jest zwolnienie starych/nieczytelnie przywoływanych obiektów w celu zrobienia miejsca dla nowych obiektów.

  4. Najprostszym sposobem na wymuszenie upuszczenia pamięci podręcznej jest zwykłe odtworzenie aplikacji lub AppPool (co zresztą zdarza się co najmniej raz dziennie).Jeśli chcesz czegoś bardziej ukierunkowanego, musisz napisać kod, aby wymusić usunięcie pewnych elementów z pamięci podręcznej, używając Cache.Remove() lub używając zależnych zależności.

1

z góry głowę:

  1. Tylko zostaną unieważnione za zawartość tej tabeli.
  2. Każda aplikacja internetowa ma własną pamięć podręczną.
  3. Pamięć podręczna jest przechowywana w pamięci. i patrz na to pytanie How to determine total size of ASP.Net cache? dotyczące wielkości pamięci podręcznej
  4. http://bit.ly/vsqNDl może to pomóc
+0

Jeśli tabela ma klucze obce, czy nie unieważni także pamięci podręcznych dla tych tabel? Nie pracowałem z zależnościami Sql Cache, więc jestem ciekawy tego, a jeśli nie, to widzę kilka zastosowań dla nowych projektów. – Brian

Powiązane problemy