على الرغم من أننا الآن في عصر النطاق العريض وتركتنا القطط الصغيرة تدريجيًا، كمطورين لتطبيقات الويب، إلا أننا لا نزال نتحمل المسؤولية والالتزام بتحسين أداء تطبيقات الويب بشكل مستمر من خلال الوسائل التقنية حتى يتمكن المستخدمون من الانتظار بشكل أقل أثناء التصفح الأكثر تحديثًا.
لحسن الحظ، ASP.NET، باعتبارها تقنية تطوير ويب تعتمد على .Net Framework، تتمتع أيضًا بمزايا .Net Framework. يوفر لنا .Net Framework تقنية ذاكرة تخزين مؤقت جيدة، مما يسمح لنا بتطوير تطبيقات ويب أسرع وسهلة الاستخدام. توفر مساحة الاسم System.Web.Caching فئة Cache، والتي تعتمد فعاليتها على الحالات الثلاثة التالية:
1. النقطة الزمنية (صالحة ضمن النقطة الزمنية المحددة)؛
2. قيمة المفتاح (يتم استخدام قيمة المفتاح كمعرف عنصر ذاكرة التخزين المؤقت)؛
3. الملف أو الدليل (إذا تغير الملف أو الدليل المحدد، فلن يكون عنصر ذاكرة التخزين المؤقت الأصلي متاحًا)؛
بعد ذلك، سوف أشارككم كيفية استخدام ذاكرة التخزين المؤقت لتحسين أداء تطبيقات ASP.NET بناءً على التطبيقات المطورة فعليًا.
في التطوير، غالبًا ما نواجه مشكلة قراءة قائمة السجلات (مثل قائمة الأخبار التي تم تحديثها مؤخرًا Top N) والسجل نفسه (مثل جزء من الأخبار)، هل يحتاج المستخدم إلى قراءة هذه المعلومات بشكل متكرر؟ من قاعدة البيانات في كل مرة؟ إذا كنت ذكيًا، فربما تعلم أن هذا غير ضروري على الإطلاق.
لتسهيل المعالجة، يمكننا أيضًا تصميم فئة SiteCache (استخلاص الدروس من CSCache.cs في CS) وتوفير عدة طرق ثابتة للتعامل مع إضافة وحذف عناصر ذاكرة التخزين المؤقت.
شفرة:
SiteCache.cs
1استخدام النظام؛
2باستخدام System.Collections;
3باستخدام System.Text.RegularExpressions؛
4باستخدام System.Web؛
5باستخدام System.Web.Caching؛
6
7مساحة الاسم Ycweb.Components
8 {
9 فئة SiteCache العامة
10 {
11 ذاكرة تخزين مؤقت خاصة ثابتة للقراءة فقط _cache;
12 عام ثابت للقراءة فقط int DayFactor؛
13 عاملًا ثابتًا خاصًا؛
14 عام ثابت للقراءة فقط int HourFactor؛
15 عام ثابت للقراءة فقط int MinuteFactor؛
16
17 SiteCache () ثابت
18 {
19DayFactor = 17280;
20 عامل الساعة = 720؛
21 دقيقة فاكتور = 12؛
22 عامل = 5؛
23 _cache = HttpRuntime.Cache;
أربعة وعشرون }
25
26 SiteCache () خاص
27 {
28 }
29
30 فراغًا ثابتًا عامًا واضحًا ()
31 {
32 IDictionaryEnumerator enumerator = _cache.GetEnumerator();
33 بينما (enumerator.MoveNext())
34 {
35 _cache.Remove(enumerator.Key.ToString());
36}
37 }
38
39 الحصول على كائن ثابت عام (مفتاح السلسلة)
40 {
41 return _cache[key];
42 }
43
44 إدراج فراغ ثابت عام (مفتاح سلسلة، كائن كائن)
45 {
46 Insert(key, obj, null, 1);
47 }
48
49 إدراج الفراغ الثابت العام (مفتاح السلسلة، الكائن obj، ثواني int)
50 {
51 إدراج(مفتاح، كائن، لاغية، ثواني)؛
52 }
53
54 إدراج باطل عام ثابت (مفتاح سلسلة، كائن كائن، CacheDependency dep)
55 {
56 Insert(key, obj, dep, HourFactor*12);
57 }
58
59 إدراج الفراغ الثابت العام (مفتاح السلسلة، كائن الكائن، ثواني int، أولوية CacheItemPriority)
60 {
61 Insert(key, obj, null, ثواني, الأولوية);
62 }
63
64 إدراج الفراغ الثابت العام (مفتاح السلسلة، الكائن obj، CacheDependency dep، int ثواني)
65 {
66 Insert(key, obj, dep, ثواني, CacheItemPriority.Normal);
67 }
68
69 إدراج الفراغ الثابت العام (مفتاح السلسلة، كائن الكائن، CacheDependency dep، int ثواني، أولوية CacheItemPriority)
70 {
71 إذا (obj! = فارغة)
72 {
73 _cache.Insert(key, obj, dep, DateTime.Now.AddSeconds((double) (Factor*thans))), TimeSpan.Zero, Priority, null);
74}
75 }
76
77 الحد الأقصى للفراغ الثابت العام (مفتاح السلسلة، الكائن obj)
78 {
79 ماكس(مفتاح، obj، فارغة)؛
80}
81
82 الحد الأقصى للفراغ الثابت العام (مفتاح السلسلة، كائن الكائن، CacheDependency dep)
83 {
84 إذا (obj! = فارغة)
85 {
86 _cache.Insert(key, obj, dep, DateTime.MaxValue, TimeSpan.Zero, CacheItemPriority.AboveNormal, null);
87 }
88}
89
90 MicroInsert العامة الثابتة (مفتاح السلسلة، كائن obj، int SecondFactor)
91 {
92 إذا (obj ! = فارغة)
93 {
94 _cache.Insert(key, obj, null, DateTime.Now.AddSeconds((double) (Factor* SecondFactor)), TimeSpan.Zero);
95 }
96 }
97
98 إزالة الفراغ العام الثابت (مفتاح السلسلة)
99 {
100 _cache.Remove(key);
101 }
102
103 الفراغ الثابت العام RemoveByPattern (نمط السلسلة)
104 {
105 IDictionaryEnumerator enumerator = _cache.GetEnumerator();
106 Regex regex1 = new Regex(pattern, RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.IgnoreCase);
107 بينما (enumerator.MoveNext())
108 {
109 إذا (regex1.IsMatch(enumerator.Key.ToString()))
110 {
111 _cache.Remove(enumerator.Key.ToString());
112 }
113 }
114 }
115
116 ReSetFactor الفراغ العام الثابت (int CacheFactor)
117 {
118 عامل = عامل التخزين المؤقت؛
119 }
120
121
122
123 }
124}
في الواقع، تستخدم هذه الفئة بشكل أساسي الميزات الأولى والثانية لتبعيات ذاكرة التخزين المؤقت المذكورة أعلاه للحفاظ على عناصر ذاكرة التخزين المؤقت الخاصة بنا.
الآن بعد أن أصبح لدينا فئة SiteCache، دعونا نرى كيفية استخدامها. أو خذ قراءة قائمة أخبار TonN كمثال:
1 مجموعة السجلات الثابتة العامة GetNewsSetTopN (string classCode،int topN،SortPostsBy orderBy، SortOrdersortOrder، لغة السلسلة)
2 {
3 سلسلة ذاكرة التخزين المؤقت Key = string.Format("NewsSetTopN-LG:{0}:CC:{1}:TN:{2}:OB:{3}:SO:{4}"، language,classCode,topN.ToString( )، orderBy.ToString(),sortOrder.ToString());
4
5 // قراءة عناصر ذاكرة التخزين المؤقت من السياق
6 RecordSet newsSet = HttpContext.Current.Items[cacheKey] as RecordSet;
7 إذا (newSet == null)
8 {
9 // قراءة عناصر ذاكرة التخزين المؤقت من HttpRuntime.Cache
10 newsSet = SiteCache.Get(cacheKey) as RecordSet;
11 إذا (مجموعة الأخبار == خالية)
12 {
13 //اقرأ مباشرة من قاعدة البيانات
14 CommonDataProvider dp=CommonDataProvider.Instance();
15 newsSet =dp.GetNewsSetTopN(language,classCode,topN,orderBy,sortOrder);
16 // وقم بتخزين النتائج في HttpRuntime.Cache
17 SiteCache.Insert(cacheKey, newsSet, 60, CacheItemPriority.Normal);
18}
19
20}
21عودة الأخبار؛
إثنان وعشرون}
وبهذه الطريقة، ليست هناك حاجة للوصول بشكل متكرر إلى قاعدة البيانات لقراءة القائمة في غضون 5 دقائق. بالطبع، سيتساءل بعض الأشخاص، ماذا لو تم حذف خبر معين أو تعديله خلال هذه الدقائق الخمس؟ يمكننا حذفه أو تعديله. قم بحذف عنصر ذاكرة التخزين المؤقت بالقوة بناءً على مفتاح ذاكرة التخزين المؤقت. بالطبع، إذا كنت تشعر أنك لا تهتم بشكل خاص بتوقيت القائمة، فلا يمكنك حذف عنصر ذاكرة التخزين المؤقت بالقوة والسماح لذاكرة التخزين المؤقت. تنتهي صلاحية العنصر تلقائيًا في الوقت المحدد. بالطبع، من الأفضل توفير طريقة لحذف عناصر ذاكرة التخزين المؤقت بالقوة بناءً على عناصر النمط المطابقة، على سبيل المثال:
1/**//// <الملخص>
2/// احذف عناصر ذاكرة التخزين المؤقت لقائمة NewsSetTopN المطابقة
3/// </الملخص>
4. الفراغ الثابت العام ClearNewsSetTopNCache (لغة السلسلة، رمز فئة السلسلة، int topN)
5 {
6 string castkey = string.Format("NewsSetTopN-LG:{0}:CC:{1}:TN:{2}",language,classCode,topN.ToString());
7 SiteCache.RemoveByPattern(cacheKey);
8}
9.
بعد نشر الأخبار، قم باستدعاء الطريقة الثابتة ClearNewsSetTopNCache() لمسح عناصر ذاكرة التخزين المؤقت TopN الأصلية بالقوة، على سبيل المثال:
1/**//// <الملخص>
2/// نشر الأخبار (الجديدة).
3/// </الملخص>
4/// <param name="post">مثال للأخبار</param>
5/// <returns>حالة الإرجاع</returns>
6 إنشاء عدد ثابت عام (منشور أخبار)
7 {
8 حالة كثافة العمليات؛
9 CommonDataProvider dp=CommonDataProvider.Instance();
10 dp.CreateUpdateDeleteNews(post, DataAction.Create, out condition);
11 // فرض مسح عناصر ذاكرة التخزين المؤقت المطابقة
12 ClearNewsSetTopNCache (post.Language, post.ClassCode,Globals.GetSiteSetting.NewsListTopN);
13 حالة العودة؛
14}
هذا كل شيء، إذا كان هناك أي خطأ، آمل أن يصححني جميع الزملاء.
http://www.cnblogs.com/aspsir/archive/2006/07/27/461229.html