it-swarm.asia

Bagaimana cara menghapus cache server di asp.net?

Bagaimana cara menghapus cache server di asp.net? Saya telah menemukan bahwa ada dua jenis cache. Ada cache browser dan cache server. Saya telah melakukan pencarian tetapi saya belum menemukan panduan langkah demi langkah yang jelas untuk membersihkan cache server menggunakan asp.net (atau tidak).

(pembaruan) Saya baru tahu bahwa kode di belakang untuk ini ada di VB - Visual Basic (dot net). 

30
xarzu

Anda bisa mengulang semua item cache dan menghapusnya satu per satu:

foreach (System.Collections.DictionaryEntry entry in HttpContext.Current.Cache){
    HttpContext.Current.Cache.Remove(string(entry.Key));
}

Koreksi Sintaks untuk ASP.NET 4.5 C #

foreach (System.Collections.DictionaryEntry entry in HttpContext.Current.Cache){
    HttpContext.Current.Cache.Remove((string)entry.Key);
}
44
Kenneth

Ada masalah dengan iterasi: ini bukan utas yang aman. Jika Anda melakukan iterasi, dan cache diakses dari utas lain, Anda mungkin mendapatkan kesalahan . Kemungkinan ini rendah, tetapi itu adalah masalah dengan aplikasi beban tinggi . FYI, beberapa cache implementasi bahkan tidak menyediakan metode iterasi.

Selain itu, jika Anda menghapus item cache, Anda tidak ingin menghapus semuanya dari setiap bagian dari domain aplikasi, tetapi hanya apa yang terkait dengan Anda.

Ketika saya menghadapi masalah ini, saya menyelesaikannya dengan menambahkan custom CacheDependency ke semua entri cache saya.

Ini adalah bagaimana CacheDependency didefinisikan: 

public class CustomCacheDependency : CacheDependency
{
    //this method is called to expire a cache entry:
    public void ForceDependencyChange()
    {
        this.NotifyDependencyChanged(this, EventArgs.Empty);
    }
}

//this is how I add objects to cache:
HttpContext.Current.Cache.Add(key, //unique key 
            obj, 
            CreateNewDependency(), //the factory method to allocate a dependency
            System.Web.Caching.Cache.NoAbsoluteExpiration,
            new TimeSpan(0, 0, ExpirationInSeconds),
            System.Web.Caching.CacheItemPriority.Default,
            ReportRemovedCallback);

//A list that holds all the CustomCacheDependency objects:
#region dependency mgmt
private List<CustomCacheDependency> dep_list = new List<CustomCacheDependency>();

private CustomCacheDependency CreateNewDependency()
{
        CustomCacheDependency dep = new CustomCacheDependency();
        lock (dep_list)
        {
            dep_list.Add(dep);
        }
        return dep;
}

//this method is called to flush ONLY my cache entries in a thread safe fashion:
private void FlushCache()
{
        lock (dep_list)
        {
            foreach (CustomCacheDependency dep in dep_list) dep.ForceDependencyChange();
            dep_list.Clear();
        }
} 
#endregion
8
J W

Saya tidak yakin dengan metodologi yang tepat di mana Anda ingin mencapai ini. Tetapi ada beberapa cara, satu cara adalah yang diposting Giorgio Minardi yang berasal dari pertanyaan ini.

Pilihan lain bisa seperti ini:

using Microsoft.Web.Administration;

public bool RecycleApplicationPool(string appPoolName)
{

    try
    {
        using (ServerManager iisManager = new ServerManager())
        {
             iisManager.ApplicationPools[appPoolName].Recycle();
             return true;
        }
    }
    catch (Exception ex)
    {
        throw new Exception("Unhandled Exception");
    }
}

Itu akan berhasil mendaur ulang kumpulan aplikasi Anda. Yang akan menghapus cache. Anda punya beberapa pilihan. Hati-hati, meskipun ini akan menghapus cache tetapi juga akan menghentikan sesi yang ada.

Semoga ini bisa membantu.

2
Greg
public void ClearCacheItems()
{
   List<string> keys = new List<string>();
   IDictionaryEnumerator enumerator = Cache.GetEnumerator();

   while (enumerator.MoveNext())
     keys.Add(enumerator.Key.ToString());

   for (int i = 0; i < keys.Count; i++)
      Cache.Remove(keys[i]);
} 
2
Faisal Pathan

System.Web.HttpRuntime.UnloadAppDomain () - restart aplikasi web, membersihkan cache, me-reset bundel css/js

1
Pavel Nazarov

Anda harus menghapus item yang Anda tambahkan ke cache: 

var itemsInCache= HttpContext.Current.Cache.GetEnumerator();

while (itemsInCache.MoveNext())
{

    HttpContext.Current.Cache.Remove(enumerator.Key);

}
1
Giorgio Minardi

tambahkan kode ini pada acara pemuatan laman .. yaitu http header untuk menghapus cache.

Response.CacheControl = "private"
Response.CacheControl = "no-cache"
Response.ClearHeaders()
Response.AppendHeader("Cache-Control", "no-cache")        
Response.AppendHeader("Cache-Control", "private")            
Response.AppendHeader("Cache-Control", "no-store")          
Response.AppendHeader("Cache-Control", "must-revalidate")          
Response.AppendHeader("Cache-Control", "max-stale=0")           
Response.AppendHeader("Cache-Control", "post-check=0")           
Response.AppendHeader("Cache-Control", "pre-check=0")      
Response.AppendHeader("Pragma", "no-cache")
Response.AppendHeader("Keep-Alive", "timeout=3, max=993")          
Response.AppendHeader("Expires", "Mon, 26 Jul 2006 05:00:00 GMT")
0
Bhushan Shimpi