Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Microsoft tarafından
Önbelleğe alma hakkında bilgi edinmek, iyi performans gösteren bir ASP.NET uygulaması için önemlidir. ASP.NET 1.x önbelleğe alma için üç farklı seçenek sundu; çıkış önbelleğe alma, parça önbelleğe alma ve önbellek API'sini kullanın.
Önbelleğe alma hakkında bilgi edinmek, iyi performans gösteren bir ASP.NET uygulaması için önemlidir. ASP.NET 1.x önbelleğe alma için üç farklı seçenek sundu; çıkış önbelleğe alma, parça önbelleğe alma ve önbellek API'sini kullanın. ASP.NET 2.0 bu yöntemlerin üçünü de sunar, ancak bazı önemli ek özellikler ekler. Birkaç yeni önbellek bağımlılığı vardır ve geliştiriciler artık özel önbellek bağımlılıkları oluşturma seçeneğine de sahiptir. Önbelleğe alma yapılandırması da ASP.NET 2.0'da önemli ölçüde geliştirilmiştir.
Yeni Özellikler
Önbellek Profilleri
Önbellek profilleri, geliştiricilerin daha sonra tek tek sayfalara uygulanabilecek belirli önbellek ayarlarını tanımlamasına olanak sağlar. Örneğin, 12 saat sonra önbellekten süresi dolması gereken bazı sayfalarınız varsa, bu sayfalara uygulanabilecek bir önbellek profilini kolayca oluşturabilirsiniz. Yeni bir önbellek profili eklemek için yapılandırma dosyasındaki <outputCacheSettings> bölümünü kullanın. Örneğin, 12 saatlik önbellek süresini yapılandıran twoday adlı bir önbellek profilinin yapılandırması aşağıda verilmiştir.
<outputCacheSettings>
<outputCacheProfiles>
<add name="TwoDay" duration="43200" />
</outputCacheProfiles>
</outputCacheSettings>
Bu önbellek profilini belirli bir sayfaya uygulamak için, aşağıda gösterildiği gibi @ OutputCache yönergesinin CacheProfile özniteliğini kullanın:
<%@ OutputCache CacheProfile="TwoDay" %>
Özel Önbellek Bağımlılıkları
ASP.NET 1.x geliştiricileri özel önbellek bağımlılıkları için ağladı. ASP.NET 1.x'te, geliştiricilerin kendi sınıflarını türetmesini engelleyen CacheDependency sınıfı mühürlendi. ASP.NET 2.0'da bu sınırlama kaldırılır ve geliştiriciler kendi özel önbellek bağımlılıklarını geliştirebilir. CacheDependency sınıfı dosyalara, dizinlere veya önbellek anahtarlarına göre özel bir önbellek bağımlılığı oluşturulmasını sağlar.
Örneğin, aşağıdaki kod Web uygulamasının kökünde bulunan stuff.xml adlı dosyayı temel alan yeni bir özel önbellek bağımlılığı oluşturur:
System.Web.Caching.CacheDependency dep = new
System.Web.Caching.CacheDependency(Server.MapPath("stuff.xml"));
Response.AddCacheDependency(dep);
Cache.Insert("key", "value");
Bu senaryoda, stuff.xml dosyası değiştiğinde önbelleğe alınan öğe geçersiz kılınır.
Önbellek anahtarlarını kullanarak özel bir önbellek bağımlılığı oluşturmak da mümkündür. Bu yöntem kullanıldığında, önbellek anahtarının kaldırılması önbelleğe alınan verileri geçersiz kılacak. Aşağıdaki örnekte bu gösterilmektedir:
// 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);
Yukarıda eklenen öğeyi geçersiz kılacak şekilde önbellek anahtarı görevi görmesi için önbelleğe eklenen öğeyi kaldırmanız yeterlidir.
// Remove the cache item that serves as the cache key
Cache.Remove("CacheKey");
Önbellek anahtarı işlevi gören öğenin anahtarının, önbellek anahtarları dizisine eklenen değerle aynı olması gerektiğini unutmayın.
SQL Önbelleği Bağımlılıklarını Polling-Based(Table-Based Bağımlılıkları olarak da adlandırılır)
SQL Server 7 ve 2000, SQL önbellek bağımlılıkları için yoklama tabanlı modeli kullanır. Yoklama tabanlı model, tablodaki veriler değiştiğinde tetiklenen bir veritabanı tablosunda tetikleyici kullanır. Bu tetikleyici, bildirim tablosundaki ASP.NET düzenli aralıklarla denetleyebilen bir changeId alanını güncelleştirir. changeId alanı güncelleştirildiyse ASP.NET verilerin değiştiğini ve önbelleğe alınan verileri geçersiz kıldığını bilir.
Not
SQL Server 2005, yoklama tabanlı modeli de kullanabilir, ancak yoklama tabanlı model en verimli model olmadığından, SQL Server 2005 ile sorgu tabanlı model (daha sonra ele alınmaktadır) kullanılması önerilir.
Yoklama tabanlı modeli kullanan bir SQL önbelleği bağımlılığının düzgün çalışması için tablolarda bildirimlerin etkinleştirilmiş olması gerekir. Bu, SqlCacheDependencyAdmin sınıfı kullanılarak veya aspnet_regsql.exe yardımcı programı kullanılarak program aracılığıyla gerçekleştirilebilir.
Aşağıdaki komut satırı, Products tablosunu SQL önbellek bağımlılığı için dbase adlı SQL Server örneğinde bulunan Northwind veritabanına kaydeder.
aspnet_regsql -S dbase -ed -d Northwind -E -et -t Products
Yukarıdaki komutta kullanılan komut satırı anahtarlarının açıklaması aşağıdadır:
Komut Satırı Anahtarı | Amaç |
---|---|
-S sunucusu | Sunucu adını belirtir. |
-Ed | Veritabanının SQL önbellek bağımlılığı için etkinleştirilmesi gerektiğini belirtir. |
-d database_name | SQL önbellek bağımlılığı için etkinleştirilmesi gereken veritabanı adını belirtir. |
-E | aspnet_regsql veritabanına bağlanırken Windows kimlik doğrulamasını kullanması gerektiğini belirtir. |
-et | SQL önbellek bağımlılığı için bir veritabanı tablosunu etkinleştirdiğimiz belirtir. |
-t table_name | SQL önbellek bağımlılığı için etkinleştirileceği veritabanı tablosunun adını belirtir. |
Not
aspnet_regsql.exe için kullanılabilecek başka anahtarlar da vardır. Tam liste için aspnet_regsql.exe -? komutunu çalıştırın. komut satırından.
Bu komut çalıştırıldığında SQL Server veritabanında aşağıdaki değişiklikler yapılır:
- bir AspNet_SqlCacheTablesForChangeNotification tablosu eklenir. Bu tablo, veritabanındaki sql önbellek bağımlılığının etkinleştirildiği her tablo için bir satır içerir.
- Aşağıdaki saklı yordamlar veritabanının içinde oluşturulur:
AspNet_SqlCachePollingStoredProcedure | AspNet_SqlCacheTablesForChangeNotification tablosunu sorgular ve SQL önbellek bağımlılığı için etkinleştirilmiş tüm tabloları ve her tablo için changeId değerini döndürür. Bu depolanan proc, verilerin değişip değişmediğini belirlemek üzere yoklama için kullanılır. |
---|---|
AspNet_SqlCacheQueryRegisteredTablesStoredProcedure | AspNet_SqlCacheTablesForChangeNotification tablosunu sorgulayarak SQL önbellek bağımlılığı için etkinleştirilen tüm tabloları döndürür ve SQL önbellek bağımlılığı için etkinleştirilmiş tüm tabloları döndürür. |
AspNet_SqlCacheRegisterTableStoredProcedure | Bildirim tablosuna gerekli girişi ekleyerek sql önbellek bağımlılığı için bir tablo kaydeder ve tetikleyiciyi ekler. |
AspNet_SqlCacheUnRegisterTableStoredProcedure | Bildirim tablosundaki girdiyi kaldırarak SQL önbellek bağımlılığı için bir tablonun kaydını kaldırır ve tetikleyiciyi kaldırır. |
AspNet_SqlCacheUpdateChangeIdStoredProcedure | Değiştirilen tablonun changeId değerini artırarak bildirim tablosunu Güncelleştirmeler. ASP.NET verilerin değişip değişmediğini belirlemek için bu değeri kullanır. Aşağıda belirtildiği gibi, bu depolanan proc tablo etkinleştirildiğinde oluşturulan tetikleyici tarafından yürütülür. |
- Tablo için table_name_AspNet_SqlCacheNotification_Trigger adlı bir SQL Server tetikleyicisi oluşturulur. Bu tetikleyici, tabloda INSERT, UPDATE veya DELETE gerçekleştirildiğinde AspNet_SqlCacheUpdateChangeIdStoredProcedure yürütür.
- Veritabanına aspnet_ChangeNotification_ReceiveNotificationsOnlyAccess adlı bir SQL Server rolü eklenir.
aspnet_ChangeNotification_ReceiveNotificationsOnlyAccess SQL Server rolünün AspNet_SqlCachePollingStoredProcedure EXEC izinleri vardır. Yoklama modelinin düzgün çalışması için işlem hesabınızı aspnet_ChangeNotification_ReceiveNotificationsOnlyAccess rolüne eklemeniz gerekir. aspnet_regsql.exe aracı bunu sizin için yapmaz.
SQL Önbelleği Bağımlılıklarını Polling-Based Yapılandırma
Yoklama tabanlı SQL önbellek bağımlılıklarını yapılandırmak için gereken birkaç adım vardır. İlk adım, yukarıda açıklandığı gibi veritabanını ve tabloyu etkinleştirmektir. Bu adım tamamlandıktan sonra yapılandırmanın geri kalanı aşağıdaki gibidir:
- ASP.NET yapılandırma dosyasını yapılandırma.
- SqlCacheDependency'yi yapılandırma
ASP.NET Yapılandırma Dosyasını Yapılandırma
Önceki modülde açıklandığı gibi bağlantı dizesi eklemeye ek olarak, aşağıda gösterildiği gibi sqlCacheDependency <> öğesiyle bir <önbellek> öğesi de yapılandırmanız gerekir:
<?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>
Bu yapılandırma , pubs veritabanında sql önbelleği bağımlılığını etkinleştirir. sqlCacheDependency> öğesindeki pollTime özniteliğinin <varsayılan olarak 60000 milisaniye veya 1 dakika olduğunu unutmayın. (Bu değer 500 milisaniyeden az olamaz.) Bu örnekte add <> öğesi yeni bir veritabanı ekler ve pollTime değerini 9000000 milisaniye olarak ayarlayarak geçersiz kılar.
SqlCacheDependency'yi yapılandırma
Sonraki adım, SqlCacheDependency'yi yapılandırmaktır. Bunu yapmanın en kolay yolu, @ Outcache yönergesinde SqlDependency özniteliğinin değerini aşağıdaki gibi belirtmektir:
<%@ OutputCache duration="60"
VaryByParam="none" SqlDependency="pubs:authors" %>
Yukarıdaki @ OutputCache yönergesinde, pubsveritabanındaki yazarlar tablosu için bir SQL önbellek bağımlılığı yapılandırılır. Birden çok bağımlılık şu şekilde noktalı virgülle ayrılarak yapılandırılabilir:
<%@ OutputCache duration="60"
VaryByParam="none"
SqlDependency="database_name:table_name;database_name:table_name" %>
SqlCacheDependency'yi yapılandırmanın bir diğer yöntemi de bunu program aracılığıyla yapmaktır. Aşağıdaki kod, pubsveritabanındaki authors tablosunda yeni bir SQL önbelleği bağımlılığı oluşturur.
SqlCacheDependency dep = new SqlCacheDependency("pubs", "authors");
SQL önbelleği bağımlılığını program aracılığıyla tanımlamanın avantajlarından biri, oluşabilecek özel durumları işleyebilmenizdir. Örneğin, bildirim için etkinleştirilmemiş bir veritabanı için SQL önbellek bağımlılığı tanımlamaya çalışırsanız, DatabaseNotEnabledForNotificationException özel durumu oluşturulur. Bu durumda, SqlCacheDependencyAdmin.EnableNotifications yöntemini çağırıp veritabanı adını geçirerek veritabanını bildirimler için etkinleştirmeyi deneyin.
Benzer şekilde, bildirim için etkinleştirilmemiş bir tablo için SQL önbellek bağımlılığı tanımlamaya çalışırsanız TableNotEnabledForNotificationException oluşturulur. Ardından sqlCacheDependencyAdmin.EnableTableForNotifications yöntemini çağırarak veritabanı adını ve tablo adını geçirebilirsiniz.
Aşağıdaki kod örneğinde, SQL önbellek bağımlılığı yapılandırılırken özel durum işlemenin nasıl düzgün yapılandırılması gösterilmektedir.
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);
}
Daha Fazla Bilgi: https://msdn.microsoft.com/library/t9x04ed2.aspx
SQL Önbelleği Bağımlılıklarını Query-Based (Yalnızca SQL Server 2005)
SQL önbellek bağımlılığı için SQL Server 2005 kullanılırken yoklama tabanlı model gerekli değildir. SQL Server 2005 ile kullanıldığında, SQL önbellek bağımlılıkları SQL Server 2005 sorgu bildirimlerini kullanarak SQL Server örneğine SQL bağlantıları aracılığıyla doğrudan iletişim kurar (başka yapılandırma gerekmez).
Sorgu tabanlı bildirimi etkinleştirmenin en basit yolu, veri kaynağı nesnesinin SqlCacheDependency özniteliğini CommandNotification olarak ayarlayarak ve EnableCaching özniteliğini true olarak ayarlayarak bunu bildirim temelli olarak yapmaktır. Bu yöntemi kullanarak kod gerekmez. Veri kaynağında yürütülen bir komutun sonucu değişirse, önbellek verileri geçersiz kılınır.
Aşağıdaki örnek, SQL önbelleği bağımlılığı için bir veri kaynağı denetimi yapılandırır:
<asp:SqlDataSource ID="ProductList" runat="server"
ConnectionString="<%$ ConnectionStrings:Northwind %>"
EnableCaching="true"
SqlCacheDependency="CommandNotification"
SelectCommand="SELECT * FROM [Products]" />
Bu durumda, SelectCommand içinde belirtilen sorgu başlangıçtakinden farklı bir sonuç döndürürse, önbelleğe alınan sonuçlar geçersiz kılınır.
@ OutputCache yönergesinin SqlDependency özniteliğini CommandNotification olarak ayarlayarak tüm veri kaynaklarınızın SQL önbellek bağımlılıkları için etkinleştirileceğini de belirtebilirsiniz. Aşağıdaki örnekte bu gösterilmektedir.
<%@ OutputCache SqlDependency="CommandNotification"
duration="60" VaryByParam="none" %>
Not
SQL Server 2005'teki sorgu bildirimleri hakkında daha fazla bilgi için çevrimiçi kitaplar SQL Server bakın.
Sorgu tabanlı SQL önbellek bağımlılığını yapılandırmanın bir diğer yöntemi de SqlCacheDependency sınıfını kullanarak program aracılığıyla bunu yapmaktır. Aşağıdaki kod örneği bunun nasıl yapıldığını göstermektedir.
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);
Daha Fazla Bilgi: https://msdn.microsoft.com/library/default.asp?url=/library/enus/dnvs05/html/querynotification.asp
Önbellek Sonrası Değiştirme
Bir sayfayı önbelleğe almak, Web uygulamasının performansını önemli ölçüde artırabilir. Ancak, bazı durumlarda sayfanın büyük bölümünün önbelleğe alınması ve sayfa içindeki bazı parçaların dinamik olması gerekir. Örneğin, belirli süreler için tamamen statik olan bir haber hikayeleri sayfası oluşturursanız, sayfanın tamamını önbelleğe alınacak şekilde ayarlayabilirsiniz. Her sayfa isteğinde değişen bir dönen reklam başlığı eklemek istiyorsanız, sayfanın reklamı içeren bölümünün dinamik olması gerekir. Bir sayfayı önbelleğe almanızı ancak bazı içerikleri dinamik olarak değiştirmenizi sağlamak için önbellek sonrası değiştirme ASP.NET kullanabilirsiniz. Önbellek sonrası değiştirme ile, sayfanın tamamı belirli bölümleri önbelleğe alınmadan muaf olarak işaretlenmiş şekilde önbelleğe alınır. Reklam başlıkları örneğinde AdRotator denetimi, her kullanıcı için ve her sayfa yenilemesi için dinamik olarak oluşturulan reklamların önbellek sonrası değiştirme özelliğinden yararlanmanızı sağlar.
Önbellek sonrası değiştirme uygulamanın üç yolu vardır:
- Değiştirme denetimini kullanarak bildirim temelli olarak.
- Program aracılığıyla, Değiştirme denetimi API'sini kullanarak.
- Örtük olarak, AdRotator denetimini kullanma.
Değiştirme Denetimi
ASP.NET Değiştirme denetimi, önbelleğe alınmış bir sayfanın önbelleğe alınmak yerine dinamik olarak oluşturulan bölümünü belirtir. Sayfadaki dinamik içeriğin görünmesini istediğiniz konuma bir Değiştirme denetimi yerleştirirsiniz. Çalışma zamanında, Değiştirme denetimi MethodName özelliğiyle belirttiğiniz bir yöntemi çağırır. yöntemi bir dize döndürmelidir ve bu dize, Değiştirme denetiminin içeriğinin yerini alır. yöntemi, Page veya UserControl denetimi içeren statik bir yöntem olmalıdır. Değiştirme denetiminin kullanılması, istemci tarafı önbelleğinin sunucu önbelleği olarak değiştirilmesine neden olur, böylece sayfa istemcide önbelleğe alınmaz. Bu, sayfaya gelecek isteklerin dinamik içerik oluşturmak için yöntemini yeniden çağırmasını sağlar.
Değiştirme API'si
Önbelleğe alınmış bir sayfaya program aracılığıyla dinamik içerik oluşturmak için, sayfa kodunuzda WriteSubstitution yöntemini çağırabilir ve parametre olarak bir yöntemin adını geçirebilirsiniz. Dinamik içeriğin oluşturulmasını işleyen yöntem tek bir HttpContext parametresi alır ve bir dize döndürür. Dönüş dizesi, belirtilen konumda değiştirilecek içeriktir. Değiştirme denetimini bildirimli olarak kullanmak yerine WriteSubstitution yöntemini çağırmanın bir avantajı, Page veya UserControl nesnesinin statik bir yöntemini çağırmak yerine herhangi bir rastgele nesnenin yöntemini çağırabilmenizdir.
WriteSubstitution yönteminin çağrılması, istemci tarafı önbelleğe alabilirliğin sunucu önbelleği olarak değiştirilmesine neden olur, böylece sayfa istemcide önbelleğe alınmaz. Bu, sayfaya gelecek isteklerin dinamik içerik oluşturmak için yöntemini yeniden çağırmasını sağlar.
AdRotator Denetimi
AdRotator sunucu denetimi, dahili olarak önbellek sonrası değiştirme desteği uygular. Sayfanıza bir AdRotator denetimi yerleştirirseniz, üst sayfanın önbelleğe alınıp alınmadığına bakılmaksızın her istekte benzersiz tanıtımlar oluşturur. Sonuç olarak, AdRotator denetimi içeren bir sayfa yalnızca sunucu tarafında önbelleğe alınır.
ControlCachePolicy Sınıfı
ControlCachePolicy sınıfı, kullanıcı denetimlerini kullanarak parça önbelleğinin program aracılığıyla denetlenmesini sağlar. ASP.NET, kullanıcı denetimlerini BasePartialCachingControl örneğine ekler. BasePartialCachingControl sınıfı, çıktı önbelleğinin etkinleştirildiği bir kullanıcı denetimini temsil eder.
PartialCachingControl denetiminin BasePartialCachingControl.CachePolicyözelliğine eriştiğinde, her zaman geçerli bir ControlCachePolicy nesnesi alırsınız. Ancak, userControl denetiminin UserControl.CachePolicy özelliğine erişiyorsanız, geçerli bir ControlCachePolicy nesnesini yalnızca kullanıcı denetimi zaten basePartialCachingControl denetimi tarafından sarmalanmışsa alırsınız. Sarmalanmazsa, özelliği tarafından döndürülen ControlCachePolicy nesnesi, ilişkili bir BasePartialCachingControl'e sahip olmadığından onu işlemeye çalıştığınızda özel durumlar oluşturur. UserControl örneğinin özel durum oluşturmadan önbelleğe almayı destekleyip desteklemediğini belirlemek için SupportsCaching özelliğini inceleyin.
ControlCachePolicy sınıfını kullanmak, çıktı önbelleğe almayı etkinleştirmenin çeşitli yollarından biridir. Aşağıdaki listede, çıktı önbelleğini etkinleştirmek için kullanabileceğiniz yöntemler açıklanmaktadır:
- Bildirim temelli senaryolarda çıktı önbelleğe almayı etkinleştirmek için @ OutputCache yönergesini kullanın.
- PartialCachingAttribute özniteliğini kullanarak arka planda kod dosyasındaki bir kullanıcı denetimi için önbelleğe almayı etkinleştirin.
- Önceki yöntemlerden biri kullanılarak önbelleğe alınmış ve System.Web.UI.TemplateControl.LoadControl yöntemi kullanılarak dinamik olarak yüklenen BasePartialCachingControl örnekleriyle çalıştığınız programlı senaryolarda önbellek ayarlarını belirtmek için ControlCachePolicy sınıfını kullanın.
ControlCachePolicy örneği, yalnızca denetim yaşam döngüsünün Init ve PreRender aşamaları arasında başarıyla işlenebilir. PreRender aşamasından sonra bir ControlCachePolicy nesnesini değiştirirseniz, ASP.NET bir özel durum oluşturur çünkü denetim işlendikten sonra yapılan değişiklikler önbellek ayarlarını gerçekten etkileyemez (bir denetim İşleme aşamasında önbelleğe alınır). Son olarak, bir kullanıcı denetim örneği (ve dolayısıyla ControlCachePolicy nesnesi) yalnızca gerçekten işlendiğinde programlı işleme için kullanılabilir.
Önbelleğe Alma Yapılandırmasındaki Değişiklikler - <Önbelleğe> Alma Öğesi
ASP.NET 2.0'da önbelleğe alma yapılandırmasında çeşitli değişiklikler vardır. <Önbelleğe> alma öğesi ASP.NET 2.0 sürümünde yenidir ve yapılandırma dosyasında önbelleğe alma yapılandırma değişiklikleri yapmanıza olanak tanır. Aşağıdaki öznitelikler kullanılabilir.
Öğe | Açıklama |
---|---|
Önbellek | İsteğe bağlı öğe. Genel uygulama önbelleği ayarlarını tanımlar. |
Outputcache | İsteğe bağlı öğe. Uygulama genelinde çıkış önbelleği ayarlarını belirtir. |
Outputcachesettings | İsteğe bağlı öğe. Uygulamadaki sayfalara uygulanabilecek çıktı önbelleği ayarlarını belirtir. |
Sqlcachedependency | İsteğe bağlı öğe. ASP.NET bir uygulama için SQL önbellek bağımlılıklarını yapılandırır. |
<cache> Öğesi
Önbellek> öğesinde <aşağıdaki öznitelikler kullanılabilir:
Öznitelik | Açıklama |
---|---|
disableMemoryCollection | İsteğe bağlı Boole özniteliği. Makine bellek baskısı altındayken gerçekleşen önbellek bellek koleksiyonunun devre dışı bırakılıp bırakılmadığını belirten bir değer alır veya ayarlar. |
disableExpiration | İsteğe bağlı Boole özniteliği. Önbellek süre sonunun devre dışı bırakılıp bırakılmadığını belirten bir değer alır veya ayarlar. Devre dışı bırakıldığında, önbelleğe alınan öğelerin süresi dolmaz ve süresi dolan önbellek öğelerinin arka planda atılması gerçekleşmez. |
privateBytesLimit | İsteğe bağlı Int64 özniteliği. Önbellek süresi dolan öğeleri boşaltmaya ve belleği geri kazanmayı denemeden önce uygulamanın özel bayt boyutunun üst sınırını belirten bir değer alır veya ayarlar. Bu sınır hem önbellek tarafından kullanılan belleği hem de çalışan uygulamanın normal bellek yükünü içerir. Sıfır ayarı, ASP.NET belleği geri kazanmanın ne zaman başlayacağını belirlemek için kendi buluşsal özelliklerini kullanacağını gösterir. |
percentagePhysicalMemoryUsedLimit | İsteğe bağlı Int32 özniteliği. Önbellek süresi dolan öğeleri boşaltmaya başlamadan ve belleği geri kazanmayı denemeden önce bir makinenin fiziksel belleğinin en yüksek yüzdesini belirten bir değer alır veya ayarlar Bu bellek kullanımı hem önbellek tarafından kullanılan belleği hem de çalışan uygulamanın normal bellek kullanımını içerir. Sıfır ayarı, ASP.NET belleği geri kazanmanın ne zaman başlayacağını belirlemek için kendi buluşsal özelliklerini kullanacağını gösterir. |
privateBytesPollTime | İsteğe bağlı TimeSpan özniteliği. Uygulamanın özel bayt bellek kullanımı için yoklama arasındaki zaman aralığını gösteren bir değeri alır veya ayarlar. |
outputCache <> Öğesi
outputCache> öğesi için <aşağıdaki öznitelikler kullanılabilir.
Öznitelik | Açıklama |
---|---|
enableOutputCache | İsteğe bağlı Boole özniteliği. Sayfa çıktı önbelleğini etkinleştirir/devre dışı bırakır. Devre dışı bırakılırsa, programlı veya bildirim temelli ayarlardan bağımsız olarak hiçbir sayfa önbelleğe alınmaz. Varsayılan değer true değeridir. |
enableFragmentCache | İsteğe bağlı Boole özniteliği. Uygulama parçası önbelleğini etkinleştirir/devre dışı bırakır. Devre dışı bırakılırsa , @ OutputCache yönergesine veya kullanılan önbelleğe alma profiline bakılmaksızın hiçbir sayfa önbelleğe alınmaz. Yukarı akış proxy sunucularının yanı sıra tarayıcı istemcilerinin sayfa çıkışını önbelleğe almaması gerektiğini belirten bir önbellek denetimi üst bilgisi içerir. Varsayılan değer false'tur. |
sendCacheControlHeader | İsteğe bağlı Boole özniteliği. Cache-control:private üst bilgisinin varsayılan olarak çıktı önbellek modülü tarafından gönderilip gönderilmediğini belirten bir değer alır veya ayarlar. Varsayılan değer false'tur. |
omitVaryStar | İsteğe bağlı Boole özniteliği. Yanıtta http "Vary: </strong>" üst bilgisi göndermeyi etkinleştirir/devre dışı bırakır. Varsayılan false ayarıyla,önbelleğe alınan çıkış sayfaları için "*Vary: *" üst bilgisi gönderilir. Vary üst bilgisi gönderildiğinde, Vary üst bilgisinde belirtilenlere göre farklı sürümlerin önbelleğe alınmasına izin verir. Örneğin Vary :User-Agents , isteği veren kullanıcı aracısını temel alarak sayfanın farklı sürümlerini depolar. Varsayılan değer **false'tur. |
outputCacheSettings <> Öğesi
outputCacheSettings <> öğesi, daha önce açıklandığı gibi önbellek profillerinin oluşturulmasını sağlar. outputCacheSettings öğesinin <tek alt öğesi, önbellek profillerini yapılandırmaya yönelik outputCacheProfiles> öğesidir<.>
<sqlCacheDependency> Öğesi
sqlCacheDependency> öğesi için <aşağıdaki öznitelikler kullanılabilir.
Öznitelik | Açıklama |
---|---|
Etkin | Gerekli Boole özniteliği. Değişikliklerin yoklanıp yoklanmadığını gösterir. |
pollTime | İsteğe bağlı Int32 özniteliği. SqlCacheDependency'nin veritabanı tablosunu değişiklikler için yoklama sıklığını ayarlar. Bu değer, ardışık yoklamalar arasındaki milisaniye sayısına karşılık gelir. 500 milisaniyenin altına ayarlanamaz. Varsayılan değer 1 dakikadır. |
Daha Fazla Bilgi
Önbellek yapılandırmasıyla ilgili bilmeniz gereken bazı ek bilgiler vardır.
Çalışan işlemi özel bayt sınırı ayarlanmadıysa önbellek aşağıdaki sınırlardan birini kullanır:
- x86 2 GB: Fiziksel RAM'in 800 MB veya %60'ı (hangisi daha azsa)
- x86 3 GB: Fiziksel RAM'in 1800 MB veya %60'ı (hangisi daha azsa)
- x64: Fiziksel RAM'in 1 terabayt veya %60'ı (hangisi daha azsa)
Hem çalışan işlemi özel bayt sınırı hem <de privateBytesLimit/> önbelleği ayarlanırsa, önbellek en az ikisini kullanır.
1.x'te olduğu gibi önbellek girdilerini bırakır ve GC'yi çağırırız. toplamanın iki nedeni vardır:
- Özel bayt sınırına çok yakınız
- Kullanılabilir bellek %10'a yakın veya daha az
Önbellek yüzdesiniPhysicalMemoryUseLimit/> değerini 100 olarak ayarlayarak <düşük kullanılabilir bellek koşulları için kırpma ve önbelleği etkin bir şekilde devre dışı bırakabilirsiniz.
1.x'in aksine, 2.0 kırpmayı askıya alır ve son GC ise çağrıları toplar. Toplama özel baytları veya yönetilen yığınların boyutunu (önbellek) bellek sınırının %1'inden fazla azaltmadı.
Lab1: Özel Önbellek Bağımlılıkları
Yeni bir Web sitesi oluşturun.
cache.xml adlı yeni bir XML dosyası ekleyin ve web uygulamasının köküne kaydedin.
Default.aspx dosyasının arkasındaki kodda Page_Load yöntemine aşağıdaki kodu ekleyin:
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"]);
Kaynak görünümünde default.aspx dosyasının en üstüne aşağıdakileri ekleyin:
<%@ OutputCache Duration="240" VaryByParam="None" %>
Default.aspx'a göz atın. Zaman ne diyor?
Tarayıcıyı yenileyin. Zaman ne diyor?
cache.xml açın ve aşağıdaki kodu ekleyin:
<anElement></anElement>
cache.xml kaydedin.
Tarayıcınızı yenileyin. Zaman ne diyor?
Önceden önbelleğe alınmış değerleri görüntülemek yerine saatin neden güncelleştirilmiş olduğunu açıklayın:
Laboratuvar 2: Polling-Based Önbelleği Bağımlılıklarını Kullanma
Bu laboratuvar, önceki modülde oluşturduğunuz ve GridView ve DetailsView denetimi aracılığıyla Northwind veritabanındaki verilerin düzenlenmesine olanak tanıyan projeyi kullanır.
Projeyi Visual Studio 2005'te açın.
Veritabanını ve Products tablosunu etkinleştirmek için Northwind veritabanında aspnet_regsql yardımcı programını çalıştırın. Visual Studio Komut İsteminden aşağıdaki komutu kullanın:
aspnet_regsql -S server -ed -d Northwind -E -et -t Products
web.config dosyanıza aşağıdakileri ekleyin:
<caching> <sqlCacheDependency enabled = "true" pollTime = "60000" > <databases> <add name="Northwind" connectionStringName = "Northwind" pollTime = "9000000" /> </databases> </sqlCacheDependency> </caching>
showdata.aspx adlı yeni bir web formu ekleyin.
showdata.aspx sayfasına aşağıdaki @ outputcache yönergesini ekleyin:
<%@ OutputCache SqlDependency="Northwind:Products" Duration="480" VaryByParam="None"%>
showdata.aspx dosyasının Page_Load aşağıdaki kodu ekleyin:
Response.Write(DateTime.Now.ToString() + "<br><br>");
showdata.aspx için yeni bir SqlDataSource denetimi ekleyin ve Northwind veritabanı bağlantısını kullanacak şekilde yapılandırın. İleri'ye tıklayın.
ProductName ve ProductID onay kutularını seçin ve İleri'ye tıklayın.
Son'a tıklayın.
showdata.aspx sayfasına yeni bir GridView ekleyin.
Açılan listeden SqlDataSource1'i seçin.
showdata.aspx dosyasını kaydedin ve göz atın. Görüntülenen saati not edin.