Meskipun saat ini kita berada di era broadband dan anak kucing berangsur-angsur meninggalkan kita, sebagai pengembang aplikasi WEB, kita tetap mempunyai tanggung jawab dan kewajiban untuk terus mengoptimalkan kinerja aplikasi WEB melalui sarana teknis agar pengguna tidak perlu menunggu lama saat menjelajah.
Untungnya, ASP.NET, sebagai teknologi pengembangan WEB berdasarkan .Net Framework, juga menikmati keunggulan .Net Framework. .Net Framework memberi kita teknologi Cache yang baik, memungkinkan kita mengembangkan pengalaman aplikasi WEB yang lebih cepat dan ramah pengguna. Namespace System.Web.Caching menyediakan kelas Cache, yang efektivitasnya bergantung pada tiga situasi berikut:
1. Titik waktu (berlaku dalam titik waktu yang ditentukan);
2. Nilai KEY (nilai KEY digunakan sebagai pengidentifikasi item Cache);
3. File atau direktori (jika file atau direktori tertentu berubah, item Cache asli tidak akan tersedia);
Selanjutnya, saya akan berbagi dengan Anda cara menggunakan Cache untuk meningkatkan kinerja aplikasi ASP.NET berdasarkan aplikasi sebenarnya yang dikembangkan.
Dalam pengembangan, kita sering menemui masalah dalam membaca daftar catatan (seperti daftar berita yang baru saja diperbarui Top N) dan catatan itu sendiri (seperti berita) Ketika pengguna mengakses, apakah informasi tersebut perlu dibaca berulang kali dari database setiap saat? Kain wol? Jika Anda pintar, Anda mungkin tahu bahwa ini sama sekali tidak diperlukan.
Untuk memfasilitasi pemrosesan, sebaiknya kita merancang kelas SiteCache (mengambil pelajaran dari CSCache.cs di CS) dan menyediakan beberapa metode statis untuk menangani penambahan dan penghapusan item Cache.
Kode:
SiteCache.cs
1menggunakan Sistem;
2menggunakan System.Collections;
3menggunakan System.Text.RegularExpressions;
4menggunakan Sistem.Web;
5menggunakan System.Web.Caching;
6
7namespace Ycweb.Komponen
8{
9 SiteCache kelas publik
10 {
11 Cache baca statis pribadi _cache;
12 public static readonly int DayFactor;
13 Faktor int statis pribadi;
14 public static readonly in HourFactor;
15 public static readonly int MinuteFactor;
16
17 SiteCache statis()
18 {
19Faktor Hari = 17280;
Faktor 20 Jam = 720;
21 Faktor Menit = 12;
22 Faktor = 5;
23 _cache = HttpRuntime.Cache;
dua puluh empat }
25
26 SiteCache pribadi()
27 {
28 }
29
30 kekosongan statis publik Hapus()
31 {
32 IDictionaryEnumerator enumerator = _cache.GetEnumerator();
33 sementara (enumerator.MoveNext())
34 {
35 _cache.Hapus(enumerator.Key.ToString());
36}
37 }
38
39 objek statis publik Dapatkan (kunci string)
40 {
41 kembalikan _cache[kunci];
42 }
43
44 Sisipkan kekosongan statis publik (kunci string, objek objek)
45 {
46 Sisipkan(kunci, objek, null, 1);
47 }
48
49 Sisipkan kekosongan statis publik (kunci string, objek objek, int detik)
50 {
51 Sisipkan (kunci, objek, nol, detik);
52 }
53
54 Sisipan kekosongan statis publik (kunci string, objek objek, dep Ketergantungan Cache)
55 {
56 Sisipkan(kunci, objek, dep, HourFactor*12);
57 }
58
59 Sisipkan kekosongan statis publik (kunci string, objek objek, int detik, prioritas CacheItemPriority)
60 {
61 Sisipkan(kunci, objek, null, detik, prioritas);
62 }
63
64 Sisipan kekosongan statis publik (kunci string, objek objek, dep Ketergantungan Cache, int detik)
65 {
66 Sisipkan(kunci, obj, dep, detik, CacheItemPriority.Normal);
67 }
68
69 public static void Insert (kunci string, objek objek, dep CacheDependency, int detik, prioritas CacheItemPriority)
70 {
71 jika (obj!= null)
72 {
73 _cache.Insert(kunci, obj, dep, DateTime.Now.AddSeconds((double) (Faktor*detik)), TimeSpan.Zero, prioritas, null);
74}
75 }
76
77 public static void Max (kunci string, objek objek)
78 {
79 Maks(kunci, objek, nol);
80}
81
82 public static void Max (kunci string, objek objek, dep CacheDependency)
83 {
84 jika (obj!= null)
85 {
86 _cache.Insert(kunci, obj, dep, DateTime.MaxValue, TimeSpan.Zero, CacheItemPriority.AboveNormal, null);
87 }
88}
89
90 public static void MicroInsert (kunci string, objek objek, int secondFactor)
91 {
92 jika (obj!= null)
93 {
94 _cache.Insert(key, obj, null, DateTime.Now.AddSeconds((double) (Factor*secondFactor)), TimeSpan.Zero);
95 }
96 }
97
98 public static void Hapus (kunci string)
99 {
100 _cache.Hapus(kunci);
101 }
102
103 public static void HapusByPattern(pola string)
104 {
105 IDictionaryEnumerator enumerator = _cache.GetEnumerator();
106 Regex regex1 = Regex baru(pola, RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.IgnoreCase);
107 while (enumerator.MoveNext())
108 {
109 jika (regex1.IsMatch(enumerator.Key.ToString()))
110 {
111 _cache.Hapus(enumerator.Key.ToString());
112 }
113 }
114 }
115
116 kekosongan statis publik ReSetFactor(int cacheFactor)
117 {
118 Faktor = faktor cache;
119 }
120
121
122
123 }
124}
Faktanya, kelas ini terutama menggunakan fitur pertama dan kedua dari dependensi Cache yang disebutkan di atas untuk memelihara item Cache kita sendiri.
Sekarang kita memiliki kelas SiteCache, mari kita lihat cara menggunakannya. Atau ambil contoh membaca daftar berita TonN:
1 RecordSet statis publik GetNewsSetTopN (string classCode,int topN,SortPostsBy orderBy, SortOrder sortOrder, bahasa string)
2{
3 string cacheKey = string.Format("NewsSetTopN-LG:{0}:CC:{1}:TN:{2}:OB:{3}:SO:{4}", bahasa,classCode,topN.ToString( ), orderBy.ToString(),sortOrder.ToString());
4
5 //Baca item cache dari konteks
6 RecordSet newsSet = HttpContext.Current.Items[cacheKey] sebagai RecordSet;
7 jika (newsSet == null)
8 {
9 //Baca item cache dari HttpRuntime.Cache
10 newsSet = SiteCache.Get(cacheKey) sebagai RecordSet;
11 jika (newsSet == null)
12 {
13 //Baca langsung dari database
14 CommonDataProvider dp=CommonDataProvider.Instance();
15 newsSet =dp.GetNewsSetTopN(bahasa,classCode,topN,orderBy,sortOrder);
16 //Dan simpan hasilnya di HttpRuntime.Cache
17 SiteCache.Insert(cacheKey, newsSet, 60, CacheItemPriority.Normal);
18}
19
20}
21kembalinya beritaSet;
dua puluh dua}
Dengan cara ini, tidak perlu berulang kali mengakses database untuk membaca daftar dalam waktu 5 menit. Tentu saja sebagian orang akan bertanya, bagaimana jika suatu berita tertentu dihapus atau diubah dalam waktu 5 menit tersebut? Kita dapat menghapus atau memodifikasinya. Hapus paksa item Cache berdasarkan Cache KEY. Tentu saja, jika Anda merasa tidak terlalu peduli dengan ketepatan waktu daftar, Anda tidak dapat menghapus item Cache secara paksa dan membiarkan Cache tersebut. item secara otomatis kedaluwarsa pada waktu yang ditentukan. Tentu saja, yang terbaik adalah memberikan metode untuk menghapus paksa item Cache berdasarkan item pola yang cocok, misalnya:
1/**//// <ringkasan>
2/// Hapus item Cache dari daftar NewsSetTopN yang cocok
3/// </ringkasan>
4 public static void ClearNewsSetTopNCache (bahasa string, kode kelas string, int topN)
5{
6 string cacheKey = string.Format("NewsSetTopN-LG:{0}:CC:{1}:TN:{2}",bahasa,classCode,topN.ToString());
7 SiteCache.RemoveByPattern(cacheKey);
8}
9.
Setelah menerbitkan berita, panggil metode statis ClearNewsSetTopNCache() untuk menghapus paksa item cache TopN asli, misalnya:
1/**//// <ringkasan>
2/// Publikasikan berita (baru).
3/// </ringkasan>
4/// <param name="post">Contoh berita</param>
5/// <returns>Status pengembalian</returns>
6public static int Buat(Postingan berita)
7{
8 status dalam;
9 CommonDataProvider dp=CommonDataProvider.Instance();
10 dp.CreateUpdateDeleteNews(postingan, DataAction.Create, status keluar);
11 //Paksa menghapus item cache yang cocok
12 ClearNewsSetTopNCache (posting.Bahasa, post.ClassCode,Globals.GetSiteSetting.NewsListTopN);
13 status pengembalian;
14}
Itu saja, jika ada yang salah, saya harap rekan-rekan semua mengoreksi saya.
http://www.cnblogs.com/aspsir/archive/2006/07/27/461229.html