Buforowanie
autor: Microsoft
Zrozumienie buforowania jest ważne dla dobrze działającej aplikacji ASP.NET. ASP.NET 1.x oferuje trzy różne opcje buforowania; buforowanie danych wyjściowych, buforowanie fragmentów i interfejs API pamięci podręcznej.
Zrozumienie buforowania jest ważne dla dobrze działającej aplikacji ASP.NET. ASP.NET 1.x oferuje trzy różne opcje buforowania; buforowanie danych wyjściowych, buforowanie fragmentów i interfejs API pamięci podręcznej. ASP.NET 2.0 oferuje wszystkie trzy z tych metod, ale dodaje kilka znaczących dodatkowych funkcji. Istnieje kilka nowych zależności pamięci podręcznej, a deweloperzy mają teraz możliwość tworzenia niestandardowych zależności pamięci podręcznej. Konfiguracja buforowania została również znacznie ulepszona w ASP.NET 2.0.
Nowe funkcje
Profile pamięci podręcznej
Profile pamięci podręcznej umożliwiają deweloperom definiowanie określonych ustawień pamięci podręcznej, które następnie można zastosować do poszczególnych stron. Jeśli na przykład masz niektóre strony, które powinny zostać wygasłe z pamięci podręcznej po upływie 12 godzin, możesz łatwo utworzyć profil pamięci podręcznej, który można zastosować do tych stron. Aby dodać nowy profil pamięci podręcznej, użyj <sekcji outputCacheSettings> w pliku konfiguracji. Na przykład poniżej przedstawiono konfigurację profilu pamięci podręcznej o nazwie twoday , który konfiguruje czas trwania pamięci podręcznej 12 godzin.
<outputCacheSettings>
<outputCacheProfiles>
<add name="TwoDay" duration="43200" />
</outputCacheProfiles>
</outputCacheSettings>
Aby zastosować ten profil pamięci podręcznej do określonej strony, użyj atrybutu CacheProfile dyrektywy @ OutputCache, jak pokazano poniżej:
<%@ OutputCache CacheProfile="TwoDay" %>
Zależności niestandardowej pamięci podręcznej
ASP.NET 1.x deweloperzy wywoływali niestandardowe zależności pamięci podręcznej. W ASP.NET 1.x klasa CacheDependency została zapieczętowana, co uniemożliwiło deweloperom wyprowadzanie własnych klas. W ASP.NET 2.0 to ograniczenie zostało usunięte, a deweloperzy mogą tworzyć własne niestandardowe zależności pamięci podręcznej. Klasa CacheDependency umożliwia tworzenie niestandardowej zależności pamięci podręcznej na podstawie plików, katalogów lub kluczy pamięci podręcznej.
Na przykład poniższy kod tworzy nową zależność niestandardowej pamięci podręcznej na podstawie pliku o nazwie stuff.xml znajdującego się w katalogu głównym aplikacji internetowej:
System.Web.Caching.CacheDependency dep = new
System.Web.Caching.CacheDependency(Server.MapPath("stuff.xml"));
Response.AddCacheDependency(dep);
Cache.Insert("key", "value");
W tym scenariuszu po zmianie pliku stuff.xml element buforowany jest unieważniony.
Istnieje również możliwość utworzenia niestandardowej zależności pamięci podręcznej przy użyciu kluczy pamięci podręcznej. Przy użyciu tej metody usunięcie klucza pamięci podręcznej spowoduje unieważnienie buforowanych danych. Zostało to przedstawione w poniższym przykładzie:
// insert a value into cache that will serve
// as the cache key
Cache["CacheKey"] = "something";
// create an array of cache keys
string[] keys = new String[1];
keys[0] = "CacheKey";
CacheDependency dep = new CacheDependency(null, keys);
// insert an item into cache with a dependency on
// the above CacheDependency
Cache.Insert("Key", "Value", dep);
Aby unieważnić element wstawiony powyżej, po prostu usuń element wstawiony w pamięci podręcznej, aby działał jako klucz pamięci podręcznej.
// Remove the cache item that serves as the cache key
Cache.Remove("CacheKey");
Należy pamiętać, że klucz elementu, który działa jako klucz pamięci podręcznej, musi być taki sam jak wartość dodana do tablicy kluczy pamięci podręcznej.
Polling-Based zależności pamięci podręcznej SQL (nazywane również zależnościami Table-Based)
SQL Server 7 i 2000 użyj modelu opartego na sondowaniu dla zależności pamięci podręcznej SQL. Model oparty na sondowaniu używa wyzwalacza w tabeli bazy danych wyzwalanej podczas zmiany danych w tabeli. Wyzwalacz ten aktualizuje pole changeId w tabeli powiadomień, które ASP.NET okresowo sprawdza. Jeśli pole changeId zostało zaktualizowane, ASP.NET wie, że dane uległy zmianie i unieważniają buforowane dane.
Uwaga
SQL Server 2005 może również używać modelu opartego na sondowaniu, ale ponieważ model oparty na sondowaniu nie jest najbardziej wydajnym modelem, zaleca się użycie modelu opartego na zapytaniach (omówionego później) z SQL Server 2005.
Aby zależność pamięci podręcznej SQL przy użyciu modelu opartego na sondowaniu działała prawidłowo, tabele muszą mieć włączone powiadomienia. Można to zrobić programowo przy użyciu klasy SqlCacheDependencyAdmin lub za pomocą narzędzia aspnet_regsql.exe.
Poniższy wiersz polecenia rejestruje tabelę Products w bazie danych Northwind znajdującej się w SQL Server wystąpieniu o nazwie dbase dla zależności pamięci podręcznej SQL.
aspnet_regsql -S dbase -ed -d Northwind -E -et -t Products
Poniżej przedstawiono wyjaśnienie przełączników wiersza polecenia używanych w powyższym poleceniu:
Przełącznik wiersza polecenia | Cel |
---|---|
-Serwer S | Określa nazwę serwera. |
-Red | Określa, że baza danych powinna być włączona dla zależności pamięci podręcznej SQL. |
-d database_name | Określa nazwę bazy danych, która powinna być włączona dla zależności pamięci podręcznej SQL. |
-E | Określa, że aspnet_regsql należy używać uwierzytelniania systemu Windows podczas nawiązywania połączenia z bazą danych. |
-Et | Określa, że włączamy tabelę bazy danych dla zależności pamięci podręcznej SQL. |
-t table_name | Określa nazwę tabeli bazy danych, aby włączyć zależność pamięci podręcznej SQL. |
Uwaga
Dostępne są inne przełączniki dla aspnet_regsql.exe. Aby uzyskać pełną listę, uruchom aspnet_regsql.exe -? z wiersza polecenia.
Po uruchomieniu tego polecenia zostaną wprowadzone następujące zmiany w bazie danych SQL Server:
- Zostanie dodana tabela AspNet_SqlCacheTablesForChangeNotification . Ta tabela zawiera jeden wiersz dla każdej tabeli w bazie danych, dla której włączono zależność pamięci podręcznej SQL.
- W bazie danych są tworzone następujące procedury składowane:
AspNet_SqlCachePollingStoredProcedure | Wysyła zapytanie do tabeli AspNet_SqlCacheTablesForChangeNotification i zwraca wszystkie tabele, które są włączone dla zależności pamięci podręcznej SQL i wartość changeId dla każdej tabeli. Ten przechowywany proc jest używany do sondowania w celu określenia, czy dane uległy zmianie. |
---|---|
AspNet_SqlCacheQueryRegisteredTablesStoredProcedure | Zwraca wszystkie tabele włączone dla zależności pamięci podręcznej SQL, wysyłając zapytanie do tabeli AspNet_SqlCacheTablesForChangeNotification i zwracając wszystkie tabele włączone dla zależności pamięci podręcznej SQL. |
AspNet_SqlCacheRegisterTableStoredProcedure | Rejestruje tabelę zależności pamięci podręcznej SQL, dodając niezbędny wpis w tabeli powiadomień i dodaje wyzwalacz. |
AspNet_SqlCacheUnRegisterTableStoredProcedure | Wyrejestrowuje tabelę zależności pamięci podręcznej SQL, usuwając wpis w tabeli powiadomień i usuwając wyzwalacz. |
AspNet_SqlCacheUpdateChangeIdStoredProcedure | Aktualizacje tabelę powiadomień, zwiększając identyfikator changeId zmienionej tabeli. ASP.NET używa tej wartości do określenia, czy dane uległy zmianie. Jak wskazano poniżej, ten przechowywany proc jest wykonywany przez wyzwalacz utworzony po włączeniu tabeli. |
- Dla tabeli jest tworzony wyzwalacz SQL Server o nazwie table_name_AspNet_SqlCacheNotification_Trigger. Ten wyzwalacz wykonuje AspNet_SqlCacheUpdateChangeIdStoredProcedure po wykonaniu operacji INSERT, UPDATE lub DELETE w tabeli.
- Do bazy danych jest dodawana rola SQL Server o nazwie aspnet_ChangeNotification_ReceiveNotificationsOnlyAccess.
Rola aspnet_ChangeNotification_ReceiveNotificationsOnlyAccess SQL Server ma uprawnienia EXEC do AspNet_SqlCachePollingStoredProcedure. Aby model sondowania działał poprawnie, musisz dodać konto procesu do roli aspnet_ChangeNotification_ReceiveNotificationsOnlyAccess. Narzędzie aspnet_regsql.exe nie zrobi tego za Ciebie.
Konfigurowanie zależności Polling-Based pamięci podręcznej SQL
Istnieje kilka kroków wymaganych do skonfigurowania zależności pamięci podręcznej SQL opartej na sondowaniu. Pierwszym krokiem jest włączenie bazy danych i tabeli zgodnie z powyższym opisem. Po zakończeniu tego kroku pozostała część konfiguracji jest następująca:
- Konfigurowanie pliku konfiguracji ASP.NET.
- Konfigurowanie usługi SqlCacheDependency
Konfigurowanie pliku konfiguracji ASP.NET
Oprócz dodawania parametrów połączenia zgodnie z opisem w poprzednim module należy również skonfigurować <element pamięci podręcznej> z elementem <sqlCacheDependency> , jak pokazano poniżej:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="Pubs"
connectionString="Data Source=(local);
Initial Catalog=pubs;Integrated Security=true;"
providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<caching>
<sqlCacheDependency enabled = "true" pollTime = "60000" >
<databases>
<add name="pubs" connectionStringName = "pubs" pollTime = "9000000" />
</databases>
</sqlCacheDependency>
</caching>
</system.web>
</configuration>
Ta konfiguracja umożliwia zależność pamięci podręcznej SQL od bazy danych pubs . Należy pamiętać, że atrybut pollTime w <elemencie sqlCacheDependency> domyślnie to 60000 milisekund lub 1 minuta. (Ta wartość nie może być mniejsza niż 500 milisekund). W tym przykładzie <element add> dodaje nową bazę danych i zastępuje wartość pollTime, ustawiając ją na 9000000 milisekund.
Konfigurowanie usługi SqlCacheDependency
Następnym krokiem jest skonfigurowanie elementu SqlCacheDependency. Najprostszym sposobem osiągnięcia tego celu jest określenie wartości atrybutu SqlDependency w dyrektywie @ Outcache w następujący sposób:
<%@ OutputCache duration="60"
VaryByParam="none" SqlDependency="pubs:authors" %>
W powyższej dyrektywie @ OutputCache zależność pamięci podręcznej SQL jest skonfigurowana dla tabeli autorów w bazie danych pubs . Można skonfigurować wiele zależności, oddzielając je średnikami w następujący sposób:
<%@ OutputCache duration="60"
VaryByParam="none"
SqlDependency="database_name:table_name;database_name:table_name" %>
Inną metodą konfigurowania atrybutu SqlCacheDependency jest zrobienie tego programowo. Poniższy kod tworzy nową zależność pamięci podręcznej SQL od tabeli autorów w bazie danych pubs .
SqlCacheDependency dep = new SqlCacheDependency("pubs", "authors");
Jedną z zalet programowego definiowania zależności pamięci podręcznej SQL jest możliwość obsługi wszelkich wyjątków, które mogą wystąpić. Jeśli na przykład spróbujesz zdefiniować zależność pamięci podręcznej SQL dla bazy danych, która nie została włączona dla powiadomienia, zostanie zgłoszony wyjątek DatabaseNotEnabledForNotificationException . W takim przypadku możesz spróbować włączyć bazę danych dla powiadomień, wywołując metodę SqlCacheDependencyAdmin.EnableNotifications i przekazując jej nazwę bazy danych.
Podobnie, jeśli spróbujesz zdefiniować zależność pamięci podręcznej SQL dla tabeli, która nie została włączona dla powiadomienia, zostanie zgłoszony wyjątek TableNotEnabledForNotificationException . Następnie można wywołać metodę SqlCacheDependencyAdmin.EnableTableForNotifications , przekazując jej nazwę bazy danych i nazwę tabeli.
Poniższy przykładowy kod ilustruje sposób prawidłowego konfigurowania obsługi wyjątków podczas konfigurowania zależności pamięci podręcznej SQL.
try {
SqlCacheDependency SqlDep = new
SqlCacheDependency("pubs", "authors");
} catch (DatabaseNotEnabledForNotificationException exDBDis) {
try {
SqlCacheDependencyAdmin.EnableNotifications("pubs");
} catch (UnauthorizedAccessException exPerm) {
Response.Redirect("ErrorPage.htm");
}
} catch (TableNotEnabledForNotificationException exTabDis) {
try {
SqlCacheDependencyAdmin.EnableTableForNotifications("pubs",
"authors");
} catch (System.Data.SqlClient.SqlException exc) {
Response.Redirect("ErrorPage.htm");
}
} finally {
Cache.Insert("SqlSource", Source1, SqlDep);
}
Więcej informacji: https://msdn.microsoft.com/library/t9x04ed2.aspx
Query-Based zależności pamięci podręcznej SQL (tylko SQL Server 2005)
W przypadku korzystania z SQL Server 2005 dla zależności pamięci podręcznej SQL model oparty na sondowaniu nie jest konieczny. W przypadku używania z SQL Server 2005 zależności pamięci podręcznej SQL komunikują się bezpośrednio za pośrednictwem połączeń SQL z wystąpieniem SQL Server (nie jest konieczna dalsza konfiguracja) przy użyciu powiadomień dotyczących zapytań SQL Server 2005.
Najprostszym sposobem włączenia powiadomień opartych na zapytaniach jest deklaratywne ustawienie atrybutu SqlCacheDependency obiektu źródła danych na CommandNotification i ustawienie atrybutu EnableCaching na wartość true. Przy użyciu tej metody nie jest wymagany żaden kod. Jeśli wynik polecenia wykonanego względem źródła danych ulegnie zmianie, spowoduje to unieważnienie danych pamięci podręcznej.
Poniższy przykład umożliwia skonfigurowanie kontroli źródła danych dla zależności pamięci podręcznej SQL:
<asp:SqlDataSource ID="ProductList" runat="server"
ConnectionString="<%$ ConnectionStrings:Northwind %>"
EnableCaching="true"
SqlCacheDependency="CommandNotification"
SelectCommand="SELECT * FROM [Products]" />
W takim przypadku, jeśli zapytanie określone w SelectCommand zwraca inny wynik niż pierwotnie, wyniki, które są buforowane, są unieważniane.
Można również określić, że wszystkie źródła danych mają być włączone dla zależności pamięci podręcznej SQL, ustawiając atrybut SqlDependency dyrektywy @ OutputCache na CommandNotification. W poniższym przykładzie pokazano to.
<%@ OutputCache SqlDependency="CommandNotification"
duration="60" VaryByParam="none" %>
Uwaga
Aby uzyskać więcej informacji na temat powiadomień dotyczących zapytań w SQL Server 2005, zobacz SQL Server Books Online.
Inną metodą konfigurowania zależności pamięci podręcznej SQL opartej na zapytaniach jest programowe użycie klasy SqlCacheDependency. Poniższy przykładowy kod ilustruje, jak to jest realizowane.
string sql = "SELECT ProductName, ProductID FROM Products";
SqlConnection conn = new
SqlConnection(ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString);
SqlCommand cmd = new SqlCommand(sql, conn);
SqlCacheDependency dep = new SqlCacheDependency(cmd);
Response.AddCacheDependency(dep);
Więcej informacji: https://msdn.microsoft.com/library/default.asp?url=/library/enus/dnvs05/html/querynotification.asp
Podstawianie po buforze
Buforowanie strony może znacznie zwiększyć wydajność aplikacji internetowej. Jednak w niektórych przypadkach większość strony musi być buforowana, a niektóre fragmenty na stronie mają być dynamiczne. Jeśli na przykład tworzysz stronę wiadomości, która jest całkowicie statyczna dla ustawionych okresów czasu, możesz ustawić buforowanie całej strony. Jeśli chcesz dołączyć obracający się baner reklamowy, który zmienił się na każdym żądaniu strony, część strony zawierającej reklamę musi być dynamiczna. Aby umożliwić buforowanie strony, ale dynamiczne zastępowanie niektórych zawartości, można użyć ASP.NET podstawianie po pamięci podręcznej. W przypadku podstawiania po buforowaniu cała strona jest zapisywana w pamięci podręcznej z określonymi częściami oznaczonymi jako wykluczone z buforowania. W przykładzie banerów reklamowych kontrolka AdRotator umożliwia korzystanie z podstawień post-cache, dzięki czemu reklamy są dynamicznie tworzone dla każdego użytkownika i dla każdego odświeżania strony.
Istnieją trzy sposoby implementowania podstawianie po pamięci podręcznej:
- Deklaratywnie przy użyciu kontrolki Podstawianie.
- Programowo przy użyciu interfejsu API kontrolki podstawienia.
- Niejawnie przy użyciu kontrolki AdRotator.
Kontrolka podstawienia
Kontrolka podstawianie ASP.NET określa sekcję buforowanej strony, która jest tworzona dynamicznie, a nie buforowana. Kontrolkę Podstawianie należy umieścić w lokalizacji na stronie, na której ma być wyświetlana zawartość dynamiczna. W czasie wykonywania kontrolka Podstawianie wywołuje metodę, która jest określana za pomocą właściwości MethodName. Metoda musi zwrócić ciąg, który następnie zastępuje zawartość kontrolki Podstawianie. Metoda musi być metodą statyczną w kontrolce Page lub UserControl. Użycie kontrolki podstawienia powoduje zmianę możliwości buforowania po stronie klienta na pamięć podręczną serwera, dzięki czemu strona nie będzie buforowana na kliencie. Dzięki temu przyszłe żądania do strony ponownie wywołają metodę w celu wygenerowania zawartości dynamicznej.
Interfejs API podstawianie
Aby programowo utworzyć zawartość dynamiczną dla buforowanej strony, możesz wywołać metodę WriteSubstitution w kodzie strony, przekazując jej nazwę jako parametr. Metoda, która obsługuje tworzenie zawartości dynamicznej, przyjmuje pojedynczy parametr HttpContext i zwraca ciąg. Ciąg powrotny to zawartość, która zostanie zastąpiona w danej lokalizacji. Zaletą wywoływania metody WriteSubstitution zamiast deklaratywnego wywoływania kontrolki Podstawienie jest to, że można wywołać metodę dowolnego obiektu, zamiast wywoływać metodę statyczną obiektu Page lub UserControl.
Wywołanie metody WriteSubstitution powoduje zmianę pamięci podręcznej po stronie klienta na możliwość buforowania serwera, dzięki czemu strona nie będzie buforowana na kliencie. Dzięki temu przyszłe żądania do strony ponownie wywołają metodę w celu wygenerowania zawartości dynamicznej.
AdRotator, kontrolka
Kontrolka serwera AdRotator implementuje obsługę podstawiania po pamięci podręcznej wewnętrznie. Jeśli umieścisz kontrolkę AdRotator na stronie, spowoduje to renderowanie unikatowych anonsów na każdym żądaniu, niezależnie od tego, czy strona nadrzędna jest buforowana. W związku z tym strona zawierająca kontrolkę AdRotator jest buforowana tylko po stronie serwera.
ControlCachePolicy, klasa
Klasa ControlCachePolicy umożliwia programową kontrolę nad buforowaniem fragmentów przy użyciu kontrolek użytkownika. ASP.NET osadza kontrolki użytkownika w wystąpieniu BasePartialCachingControl . Klasa BasePartialCachingControl reprezentuje kontrolkę użytkownika, która ma włączoną buforowanie danych wyjściowych.
Gdy uzyskujesz dostęp do właściwości BasePartialCachingControl.CachePolicy kontrolki PartialCachingControl , zawsze otrzymasz prawidłowy obiekt ControlCachePolicy. Jeśli jednak uzyskujesz dostęp do właściwości UserControl.CachePolicy kontrolki UserControl , otrzymasz prawidłowy obiekt ControlCachePolicy tylko wtedy, gdy kontrolka użytkownika jest już opakowana przez kontrolkę BasePartialCachingControl. Jeśli nie jest opakowany, obiekt ControlCachePolicy zwrócony przez właściwość zgłasza wyjątki podczas próby manipulowania nim, ponieważ nie ma skojarzonej kontrolki BasePartialCachingControl. Aby określić, czy wystąpienie UserControl obsługuje buforowanie bez generowania wyjątków, sprawdź właściwość SupportsCaching .
Użycie klasy ControlCachePolicy jest jednym z kilku sposobów włączania buforowania danych wyjściowych. Poniższa lista zawiera opis metod, których można użyć do włączenia buforowania danych wyjściowych:
- Użyj dyrektywy @ OutputCache , aby włączyć buforowanie danych wyjściowych w scenariuszach deklaratywnych.
- Użyj atrybutu PartialCachingAttribute , aby włączyć buforowanie dla kontrolki użytkownika w pliku za kodem.
- Użyj klasy ControlCachePolicy, aby określić ustawienia pamięci podręcznej w scenariuszach programowych, w których pracujesz z wystąpieniami BasePartialCachingControl, które zostały włączone w pamięci podręcznej przy użyciu jednej z poprzednich metod i dynamicznie ładowane przy użyciu metody System.Web.UI.TemplateControl.LoadControl .
Wystąpienie ControlCachePolicy można pomyślnie manipulować tylko między etapami Init i PreRender cyklu życia sterowania. Jeśli zmodyfikujesz obiekt ControlCachePolicy po fazie preRender, ASP.NET zgłasza wyjątek, ponieważ wszelkie zmiany wprowadzone po renderowaniu kontrolki nie mogą mieć wpływu na ustawienia pamięci podręcznej (kontrolka jest buforowana podczas etapu renderowania). Na koniec wystąpienie kontrolki użytkownika (i w związku z tym jego obiekt ControlCachePolicy) jest dostępne tylko do manipulowania programowego, gdy jest rzeczywiście renderowany.
Zmiany konfiguracji buforowania — <element buforowania>
Istnieje kilka zmian w konfiguracji buforowania w ASP.NET 2.0. Element <buforowania> jest nowy w ASP.NET 2.0 i umożliwia wprowadzanie zmian konfiguracji buforowania w pliku konfiguracji. Dostępne są następujące atrybuty.
Element | Opis |
---|---|
Pamięci podręcznej | Element opcjonalny. Definiuje globalne ustawienia pamięci podręcznej aplikacji. |
Outputcache | Element opcjonalny. Określa ustawienia wyjściowej pamięci podręcznej dla całej aplikacji. |
outputCacheSettings | Element opcjonalny. Określa ustawienia wyjściowej pamięci podręcznej, które można zastosować do stron w aplikacji. |
Sqlcachedependency | Element opcjonalny. Konfiguruje zależności pamięci podręcznej SQL dla aplikacji ASP.NET. |
Element pamięci podręcznej <>
W elemecie pamięci podręcznej <> są dostępne następujące atrybuty:
Atrybut | Opis |
---|---|
disableMemoryCollection | Opcjonalny atrybut logiczny . Pobiera lub ustawia wartość wskazującą, czy kolekcja pamięci podręcznej, która występuje, gdy maszyna jest obciążona pamięcią jest wyłączona. |
disableExpiration | Opcjonalny atrybut logiczny . Pobiera lub ustawia wartość wskazującą, czy wygaśnięcie pamięci podręcznej jest wyłączone. Po wyłączeniu buforowane elementy nie wygasają, a usuwanie w tle wygasłych elementów pamięci podręcznej nie jest wykonywane. |
privateBytesLimit | Opcjonalny atrybut Int64 . Pobiera lub ustawia wartość wskazującą maksymalny rozmiar bajtów prywatnych aplikacji, zanim pamięć podręczna zacznie opróżniać wygasłe elementy i próbuje odzyskać pamięć. Ten limit obejmuje zarówno pamięć używaną przez pamięć podręczną, jak i normalne obciążenie pamięci z uruchomionej aplikacji. Ustawienie zero wskazuje, że ASP.NET będzie używać własnych heurystyki do określania, kiedy rozpocząć odzyskiwanie pamięci. |
percentagePhysicalMemoryUsedLimit | Opcjonalny atrybut Int32 . Pobiera lub ustawia wartość wskazującą maksymalną wartość procentową pamięci fizycznej maszyny, która może być używana przez aplikację, zanim pamięć podręczna zacznie opróżniać wygasłe elementy i próbuje odzyskać pamięć To użycie pamięci obejmuje zarówno pamięć używaną przez pamięć podręczną, jak i normalne użycie pamięci uruchomionej aplikacji. Ustawienie zero wskazuje, że ASP.NET będzie używać własnych heurystyki do określania, kiedy rozpocząć odzyskiwanie pamięci. |
privateBytesPollTime | Opcjonalny atrybut TimeSpan . Pobiera lub ustawia wartość wskazującą interwał czasu między sondowaniem użycia pamięci prywatnej aplikacji. |
Element <outputCache>
Następujące atrybuty są dostępne dla <elementu outputCache> .
Atrybut | Opis |
---|---|
enableOutputCache | Opcjonalny atrybut logiczny . Włącza/wyłącza pamięć podręczną danych wyjściowych strony. Jeśli jest wyłączona, żadne strony nie są buforowane niezależnie od ustawień programowych lub deklaratywnych. Wartość domyślna to true. |
enableFragmentCache | Opcjonalny atrybut logiczny . Włącza/wyłącza pamięć podręczną fragmentu aplikacji. Jeśli jest wyłączona, żadne strony nie są buforowane niezależnie od używanej dyrektywy @ OutputCache lub profilu buforowania. Zawiera nagłówek kontroli pamięci podręcznej wskazujący, że nadrzędne serwery proxy, a także klienci przeglądarki nie powinni próbować buforować danych wyjściowych strony. Wartość domyślna to false. |
sendCacheControlHeader | Opcjonalny atrybut logiczny . Pobiera lub ustawia wartość wskazującą, czy nagłówek cache-control:private jest domyślnie wysyłany przez moduł wyjściowej pamięci podręcznej. Wartość domyślna to false. |
pomijanie elementuVaryStar | Opcjonalny atrybut logiczny . Włącza/wyłącza wysyłanie nagłówka Http "Vary: </strong>" w odpowiedzi. Po ustawieniu wartości false nagłówek "*Vary: *" jest wysyłany dla stron w pamięci podręcznej danych wyjściowych. Po wysłaniu nagłówka Vary umożliwia buforowanie różnych wersji na podstawie tego, co jest określone w nagłówku Vary. Na przykład Vary:User-Agents będzie przechowywać różne wersje strony na podstawie agenta użytkownika wystawiającego żądanie. Wartość domyślna to **false. |
OutputCacheSettings<>, element
Element <outputCacheSettings> umożliwia tworzenie profilów pamięci podręcznej zgodnie z wcześniejszym opisem. Jedynym elementem podrzędnym <elementu outputCacheSettings jest <element outputCacheProfiles>> do konfigurowania profilów pamięci podręcznej.
<SqlCacheDependency>, element
Następujące atrybuty są dostępne dla <elementu sqlCacheDependency> .
Atrybut | Opis |
---|---|
Włączone | Wymagany atrybut logiczny . Wskazuje, czy zmiany są sondowane. |
pollTime | Opcjonalny atrybut Int32 . Ustawia częstotliwość, z jaką usługa SqlCacheDependency sonduje tabelę bazy danych pod kątem zmian. Ta wartość odpowiada liczbie milisekund między kolejnymi sondami. Nie można ustawić jej na mniej niż 500 milisekund. Wartość domyślna to 1 minuta. |
Więcej informacji
Istnieje kilka dodatkowych informacji, o których należy pamiętać o konfiguracji pamięci podręcznej.
Jeśli limit prywatnych bajtów procesu roboczego nie zostanie ustawiony, pamięć podręczna będzie używać jednego z następujących limitów:
- x86 2 GB: 800 MB lub 60% fizycznej pamięci RAM, w zależności od tego, co jest mniejsze
- x86 3 GB: 1800 MB lub 60% fizycznej pamięci RAM, w zależności od tego, co jest mniejsze
- x64: 1 terabajt lub 60% fizycznej pamięci RAM, w zależności od tego, co jest mniejsze
Jeśli zarówno limit bajtów prywatnych procesu roboczego, jak i <prywatny bajt pamięci podręcznejBytesLimit/> są ustawione, pamięć podręczna będzie używać co najmniej dwóch.
Podobnie jak w wersji 1.x, usuwamy wpisy pamięci podręcznej i wywołujemy GC. Z dwóch powodów zbierz:
- Jesteśmy bardzo blisko limitu bajtów prywatnych
- Dostępna pamięć jest bliska lub mniejsza niż 10%
Można skutecznie wyłączyć przycinanie i pamięć podręczną dla warunków pamięci o niskiej dostępności, ustawiając <wartość procentową pamięci podręcznejPhysicalMemoryUseLimit/> na 100.
W przeciwieństwie do wersji 1.x, wersja 2.0 zawiesi przycinanie i zbiera wywołania, jeśli ostatni GC. Zbieranie nie zmniejszyło liczby bajtów prywatnych ani rozmiaru zarządzanych sterty o ponad 1% limitu pamięci (pamięci podręcznej).
Lab1: Zależności niestandardowej pamięci podręcznej
Utwórz nową witrynę sieci Web.
Dodaj nowy plik XML o nazwie cache.xml i zapisz go w katalogu głównym aplikacji internetowej.
Dodaj następujący kod do metody Page_Load w kodzie wartości default.aspx:
System.Web.Caching.CacheDependency dep = new System.Web.Caching.CacheDependency(Server.MapPath("cache.xml")); Response.AddCacheDependency(dep); Cache.Insert("time", DateTime.Now.ToString()); Response.Write(Cache["time"]);
Dodaj następujące elementy do góry pliku default.aspx w widoku źródłowym:
<%@ OutputCache Duration="240" VaryByParam="None" %>
Przeglądaj plik Default.aspx. Co mówi czas?
Odśwież przeglądarkę. Co mówi czas?
Otwórz cache.xml i dodaj następujący kod:
<anElement></anElement>
Zapisz cache.xml.
Odśwież przeglądarkę. Co mówi czas?
Wyjaśnij, dlaczego czas zaktualizowany zamiast wyświetlania wcześniej buforowanych wartości:
Laboratorium 2: Korzystanie z zależności pamięci podręcznej Polling-Based
To laboratorium używa projektu utworzonego w poprzednim module, który umożliwia edytowanie danych w bazie danych Northwind za pośrednictwem kontrolki GridView i DetailsView.
Otwórz projekt w programie Visual Studio 2005.
Uruchom narzędzie aspnet_regsql względem bazy danych Northwind, aby włączyć bazę danych i tabelę Products. Użyj następującego polecenia w wierszu polecenia programu Visual Studio:
aspnet_regsql -S server -ed -d Northwind -E -et -t Products
Dodaj następujące informacje do pliku web.config:
<caching> <sqlCacheDependency enabled = "true" pollTime = "60000" > <databases> <add name="Northwind" connectionStringName = "Northwind" pollTime = "9000000" /> </databases> </sqlCacheDependency> </caching>
Dodaj nowy kształt internetowy o nazwie showdata.aspx.
Dodaj następującą dyrektywę @ outputcache do strony showdata.aspx:
<%@ OutputCache SqlDependency="Northwind:Products" Duration="480" VaryByParam="None"%>
Dodaj następujący kod do Page_Load pliku showdata.aspx:
Response.Write(DateTime.Now.ToString() + "<br><br>");
Dodaj nową kontrolkę SqlDataSource, aby showdata.aspx i skonfigurować ją do korzystania z połączenia bazy danych Northwind. Kliknij przycisk Dalej.
Zaznacz pola wyboru ProductName i ProductID, a następnie kliknij przycisk Dalej.
Kliknij przycisk Zakończ.
Dodaj nowy element GridView do strony showdata.aspx.
Wybierz pozycję SqlDataSource1 z listy rozwijanej.
Zapisz i przeglądaj plik showdata.aspx. Zanotuj wyświetlany czas.