Farsiplanet.com
افشايغ كارآئی بزَايّ ْای ٔب در 0.2 ( ASP.NETخبغ أل )
يىی اص ٍِضِٚبت وٍيذی دس ٘ش ٔٛع ثشٔبِٗ وبِپيٛتشی ِيضاْ
وبسائی ٚ لبثٍيت پبعخگٛئی عشيغ آْ ثٗ وبسثشاْ اعت .
پيبدٖ وٕٕذگبْ ثشٔبِٗ ٘بی وبِپيٛتشی ِی ثبيغت عشازبْ ٚ
دس صِبْ عشازی ، پيبدٖ عبصی ٚ ٔٛؽنت وذ ثٗ ايٓ ِٛضٛع
ثبؽٕذ. داؽتٗ خذی تٛخٗ
ثشٔبِٗ ٘بی ٚة ثب تٛخٗ ثٗ ِب٘يت ٚ سعبٌت خٛد ِی ثبيغت
ثٗ فذ٘ب ٚ يب ٘ضاساْ لبدس ثٗ اسائٗ خذِبت ِٛسد ٔيبص
ِتمبضی شمضِبْ ثٗ عبدگی ٚ ثب عشػت ِغٍٛة ثبؽٕذ. ثٗ ػجبست
ديگش ، شمضِبْ ثب افضايؼ وبسثشاْ سمی ثبيغت ؽب٘ذ افت عشػت
. ثبؽيُ ٚة ثشٔبِٗ يه وبسآئی ٚ
ثب اسائٗ فشميٛسن دات ٔت ٚ ثٗ دٔجبي آْ ، ASP.NETپيبدٖ
عبصی يه ثشٔبِٗ ٚة ثغشص ٔبثبٚسأٗ ای عبدٖ ؽذٖ اعت . شمني
ِٛضٛع ثبػث ؽذٖ اعت وٗ عشازبْ ٚ پيبدٖ وٕٕذگبْ ثيؾرت دس
أذيؾٗ عشازی ٚ پيبدٖ عبصی عشيغ ثشٔبِٗ ٘بی ٚة ثبؽٕذ ٚ
ثٗ ِغبئً ِشثٛط ثٗ وبسآئی ثشٔبِٗ وّرت تٛخٗ سمبيٕذ .
فٕبٚسی پيبدٖ وٕٕذگبْ ثشٔبِٗ ٘بی ٚة ثب اعتفبدٖ اص
ِ ASP.NETی ثبيغت ثب ثىبسگريی جمّٛػٗ ای اص تشفٕذ٘ب ،
فٕبٚسی ٘ب ٚ سػبيت ثشخی ٔىبت وٍيذی الذاَ ثٗ پيبدٖ عبصی
ثشٔبِٗ ٘بی ٚة ثب وبسآئی ثبال سمبيٕذ .
دس ايٓ ِمبٌٗ ٚ عبيش ِمبالتی وٗ دس آيٕذٖ ِٕتؾش خٛا٘ذ ؽذ
لقذ داسمي ثٗ ثشخی اص سٚػ ٘بی ِٛخٛد ثٗ ِٕظٛس عشازی ٚ
پيبدٖ عبصی يه ثشٔبِٗ ٚة وبسآ اؽبسٖ سمبئيُ . ثذيٓ ِٕظٛس
ثش سٚی عٗ حمٛس اعبعی صيش ِتّشوض خٛا٘يُ ؽذ :
1
Farsiplanet.com
: دس ايٓ ساثغٗ ثٗ جمّٛػٗ ای اص طزاحی بزای كارآئی
ٔىبت وٍيذی اؽبسٖ خٛا٘يُ وشد وٗ سػبيت آهنب دس صِبْ
عشازی ِی تٛأذ صِيٕٗ پيبدٖ عبصی يه ثشٔبِٗ ٚة وبسآ
سا فشاُ٘ سمبيذ .
تظت بزَايّ قبم اس ػًهياتی ػذٌ آٌ : يىی اص ِغبئً
ُِٙ دس استجبط ثب ثشٔبِٗ ٘بی ٚة ، ػذَ تغت آهنب ثب
ؽشايظ ِؾبثٗ ٚ يب ٔضديه ثٗ حميظ ٚالؼی اعت . دس ايٓ
ساعتب ِی تٛاْ اص ٔشَ افضاس٘ب ٚ يب اثضاس٘بی خمتٍفی
اعتفبدٖ وشد تب ثتٛاْ ػٍّىشد ٚ عشٚيظ د٘ی يه ثشٔبِٗ
سا لجً اص صيش ثبس سفنت ٚالؼی ِؾب٘ذٖ ٚ ثشسعی ٚة
ٚ اثضاس٘ب ساثغٗ دس ايٓ ؽشوت ِبيىشٚعبفت . سمٛد
ثشٔبِٗ ٘بی ِتؼذدی سا اسائٗ سمٛدٖ اعت وٗ ثٗ ثشسعی
آهنب خٛا٘يُ پشداخت .
پيادِ طاسی طيظتى : cachingثب پيبدٖ عبصی عيغتُ
تٛاْ ِی دادٖ caching ٚ ِتفبٚت عغٛذ دس caching
وبسآئی ثشٔبِٗ ٘بی ٚة سا ثغشص وبِال" حمغٛعی افضايؼ
داد. دس ايٓ خبؼ ثٗ رمٖٛ پيبدٖ عبصی عيغتُ cachingدس
ثشٔبِٗ ٘بی ٚة اؽبسٖ خٛا٘يُ وشد .
دس اداِٗ ثش سٚی اٌٚني حمٛس ِتّشوض ٚ ثٗ ثشسعی ِغبئً
ِشتجظ ثب آْ خٛا٘يُ پشداخت .
طزاحی بزای كارآئی
تٛخٗ ٚ سػبيت ِٛاسد صيش پيبدٖ وٕٕذگبْ سا دس خٙت پيبدٖ
عبصی ثشٔبِٗ ٘بی ٚة ثب وبسآئی ثبال وّه خٛا٘ذ وشد :
يكاَيشو تزمجّ كذ در ASP.NET
2
Farsiplanet.com
داسای ASP.NET اص اعتفبدٖ ثب ؽذٖ ٔٛؽتٗ ٘بی ثشٔبِٗ
وبسآئی دبشاتت ثيؾرتی ٔغجت ثٗ ثشٔبِٗ ٘بی ٔٛؽتٗ ؽذٖ ثب
اعتفبدٖ اص ASPوالعيه ِی ثبؽٕذ . ايٓ دعتبٚسد ٔبؽی اص
تشمجٗ اتِٛبتيه وذ دس ASP.NETاعت . دس ففسبت لذميی ٔٛؽتٗ
ؽذٖ ثب اعتفبدٖ اص ASPوالعيه ، وذ٘ب ٚ يب اعىشيپت ٘بی
ِٛخٛد دس يه ففسٗ ثشای ٘ش يه اص دسخٛاعت ٘بی وبسثشاْ
پشداصػ ِی گشديذ . دس ٘ ، ASP.NETش والط ففسٗ دس اٌٚني
ِشتجٗ دعتيبثی وّپبيً ٚ ثشای دسخٛاعت ٘بی آتی ِ cacheی
گشدد .
صِبٔی وٗ اٌٚني ِشتجٗ يه وبسثش ففسٗ ای سا دسخٛاعت ِی
سمبيذ ( ٚ يب اٌٚني ِشتجٗ دعتيبثی پظ اص اصمبد تغيريات دس
، يه تبخري لبثً ِالزظٗ دس صِبْ پبعخ ثٗ دسخٛاعت ففسٗ )
خٛد سا ِؾب٘ذٖ ِی سمبيذ ( تبخري ٔبؽی اص تشمجٗ ففسٗ ) .
precompilation ثشای ثشخٛسد ثب ايٓ ِٛضٛع ِی تٛاْ اص سٚػ
اعتفبدٖ سمٛد . ثب اعتفبدٖ اص سٚػ فٛق پظ اص اعتمشاس
ففسبت ثش سٚی عشٚيظ دٕ٘ذٖ ٚة ، ثالفبفٍٗ اِىبْ دسخٛاعت ٚ
ثبصيبثی عشيغ آهنب ثشای ِتمبضيبْ فشاُ٘ ِی گشدد .
كُرتل ْای طزٔيض دُْذِ
وٕرتي ٘بی عشٚيظ دٕ٘ذٖ ػٕبفش افٍی دس يه ففسٗ ِ ASP.NETی
ثبؽٕذ ٚ loadصيبدی سا ثٗ ثشٔبِٗ زبّيً زمٛإ٘ذ وشد . ايٓ
ٔٛع وٕرتي ٘ب ِؼّٛال" داسای وبسآئی دبشاتت ذبرتی ٔغجت ثٗ
صِبٔی ِی ثبؽٕذ وٗ يه ففسٗ ثٗ فٛست پٛيب ٚ ثب اعتفبدٖ
3
Farsiplanet.com
اص تشفٕذ٘بئی ٔظري ِتذ Response. Writeخشٚخی خٛد سا تٌٛيذ
ِی سمبيذ.
دس ثشخی ِٛاسد ضشٚستی ثٗ اعتفبدٖ اص وٕرتي ٘بی عشٚيظ
ASP.NETدس يه ففسٗ ٚة زمٛا٘يُ داؽت . ثٗ ػٕٛاْ دٕ٘ذٖ
سمٛٔٗ ، دس فٛستی وٗ داسای يه ِنت ايغتب ِی ثبؽيُ وٗ ٘شگض
ضشٚستی ثٗ دعتيبثی ٚ تغيري آْ دس صِبْ اخشاء ٚ اص عشيك
وذ ٔذاسمي ، ٌضِٚی ثٗ اعتفبدٖ اص وٕرتٌی ٔظري labelزمٛا٘يُ
داؽت . دس چٕني ِٛاسدی ِی تٛاْ ثٗ عبدگی ِنت ِٛسد ٔظش سا
لشاس داد . ثب اعتفبدٖ اص اِىبٔبت HTMLدس فبيً .aspx
اص وٕرتي ِٛ ( DIVخٛد دس خبؼ دس ٚيژٚاي اعتٛديٛ ِی تٛاْ
ِٕٛ ، HTMLی )Toolboxاعتفبدٖ وشد. دس ٚالغ ِب تىٍيف ِنت
ِٛسد ٔظش خٙت سمبيؼ دس يه ففسٗ . aspxسا ٔٗ دس صِبْ
. امي وشدٖ ِؾخـ عشازی صِبْ دس ثٍىٗ اخشاء
يىی ديگش اص ٔىبت ُِٙ دس صِبْ اعتفبدٖ اص وٕرتي ٘بی
عشٚيظ دٕ٘ذٖ دس ففسبت ٚة ، تٛخٗ ثٗ سفتبس آهنب دس استجبط
ثب ٔگٙذاسی دادٖ پظ اص اسعبي جمذد ثٗ عشٚيظ دٕ٘ذٖ ِی
ثبؽذ . ثٗ فٛست پيؼ فشك ، ِمبديش ِشتجظ ثب وٕرتي ٘بی
، پظ اص عشٚيظ دٕ٘ذٖ ٔظري ِمذاس دسج ؽذٖ دس يه TextBox
postbackثغٛس اتِٛبتيه دس state viewرخريٖ ِی گشدد . دس
ٚالغ ، ِ state viewىبٔيضِی ثشای ٔگٙذاسی دادٖ وٕرتي ٘بی
عشٚيظ دٕ٘ذٖ اعت وٗ ٘ذف آْ غٍجٗ ثش حمذٚديت پشٚتىً HTTP
. ) stateless ِب٘يت ( اعت
، state viewيه ٔبَ ِٕبعت ثشای رخريٖ دادٖ دس يه فيٍذ
( post backاسعبي جمذد ٚسٚدی خمفی دسْٚ ففسٗ اعت . پظ اص
ثشای عشٚيظ گرئذٖ ) يه ففسٗ ، عشٚيظ دٕ٘ذٖ لبدس ثٗ
ثشسعی ِمبديش ٔگٙذاسی ؽذٖ دس ٚ state viewاعتفبدٖ اص آهنب
4
Farsiplanet.com
ثب تٛخٗ ثٗ ؽشايظ زبوُ ثش ثشٔبِٗ ِی ثبؽذ . state viewيه
ثب سا ٚضؼيت ٔگٙذاسی اخبصٖ چشاوٗ اعت ػبٌی لبثٍيت
اعتفبدٖ اص اِىبٔبت عشٚيظ گرئذٖ فشاُ٘ ِی سمبيذ ٚ دس ايٓ
ساثغٗ اص وٛوی ٚ زبفظٗ عشٚيظ دٕ٘ذٖ ثشای رخريٖ ٚضؼيت
. گشدد سمی اعتفبدٖ
تؼذاد صيبدی اص وٕرتي ٘بی عشٚيظ دٕ٘ذٖ ASP.NETاص view
stateثشای ٔگٙذاسی تٕظّيبت خٛد دس صِبْ تؼبًِ ثب ػٕبفش
ِٛخٛد ثش سٚی ففسٗ اعتفبدٖ ِی سمبيٕذ ( ِثال" رخريٖ ففسٗ
خبسی دس صِبْ اعتفبدٖ اص ٚيژگی pagingدس وٕرتي عشٚيظ
. ) gridview دٕ٘ذٖ
دس صِبْ اعتفبدٖ اص state viewتٛخٗ ثٗ ِٛاسد صيش ضشٚسی
اعت :
playloadففسٗ سا دس صِبْ دسخٛاعت ٚ اسائٗ افضايؼ ِی
د٘ذ .
افضايؼ overheadدس صِبْ deserializing ٚ serializingدادٖ
رخريٖ ؽذٖ دس state viewوٗ ثشای عشٚيظ دٕ٘ذٖ post-back
ؽذٖ اعت .
افضايؼ سبقيـ زبفظٗ ثش سٚی عشٚيظ دٕ٘ذٖ
وٕرتي ٘بی عشٚيظ دٕ٘ذٖ ػاللٗ صيبدی ثٗ اعتفبدٖ اص view
stateداسٔذ زتی دس ِٛاسدی وٗ ثٗ ٚخٛد آْ ٔيبص سمی ثبؽذ .
ثٗ فٛست پيؼ فشك viewstateفؼبي اعت ٚ دس فٛست ػذَ ٔيبص
ِی ثبيغت آْ سا دس عغر ففسٗ ٚ يب وٕرتي غريفؼبي سمٛد . دس
ساثغٗ ثب يه وٕرتي وبفی اعت وٗ خقٍت EnableViewStateسا false
ٚ يب ِی تٛاْ آْ سا ثٗ فٛست عشاعشی ٚ دس عغر pageغري
فؼبي سمٛد . دعتٛس صيش رمٖٛ اذمبَ ايٓ وبس سا ٔؾبْ ِی د٘ذ
:
5
Farsiplanet.com
%
اص دس عغر ففسٗ ٚ يب وٕرتي ثشای غري فؼبي وشدْ view state
لٛأني صيش ِی تٛاْ اعتفبدٖ سمٛد :
دس فٛستی وٗ دس ففسٗ ای post backاذمبَ سمی گريد ٚ يب
ففسٗ ِی ثبيغت شمٛاسٖ ثشای ٘ش يه اص وٕرتي ٘بی ِٛخٛد
ثش سٚی ففسٗ ٚ ثٗ اصاء ٘ش دسخٛاعت جمذدا" تٌٛيذ گشدد
، ِی ثبيغت view stateسا دس عغر pageغري فؼبي سمٛد .
دس فٛستی وٗ ضشٚستی ثٗ ٔگٙذاسی دادٖ ِشتجظ ثب يه
وٕرتي عشٚيظ دٕ٘ذٖ دس view stateسمی ثبؽذ ِی ثبيغت آْ
سا ثشای وٕرتي ِٛسد ٔظش غري فؼبي سمٛد . ثذيٓ ِٕظٛس
وٕرتي ثٗ ِشثٛط EnableViewState ِمذاس وٗ اعت الصَ
ِؼبدي Falseدس ٔظش گشفتٗ ؽٛد .
دس فٛستی وٗ وٕرتي دس صِبْ عشازی ِمذاسد٘ی ؽذٖ اعت ٚ
خقٍت ، يبثذ سمی تغيري آْ ِمذاس اخشاء صِبْ دس
EnableViewStateآْ ِی ثبيغت falseدس ٔظش گشفتٗ ؽٛد .
دس فٛستی وٗ وٕرتي ثب ٘ش ، back postجمذدا" خٛأذٖ
ٚ ِ refreshی گشدد ٚ ضشٚستی ثٗ ٔگٙذاسی ِمذاس ؽذٖ
لجٍی ٚخٛد ٔذاؽتٗ ثبؽذ ، خقٍت EnableViewState دادٖ
آْ ِی ثبيغت falseدس ٔظش گشفتٗ ؽٛد .
postback دس فٛستی وٗ الصَ اعت أتخبة وبسثش پظ اص
گشدد ، ِی ثبيغت state viewسا ثشای ففسٗ ثبصيبثی
وٕرتي ِٛسد ٔظش فؼبي وشد.
6
Farsiplanet.com
، state viewػِّٛب" وٕذ ؽذْ عشٚيظ دٕ٘ذٖ سا ثٗ دٔجبي
زمٛا٘ذ داؽت ثٍىٗ زدُ ففسٗ سا افضايؼ دادٖ ٚ ِذت صِبْ
اسعبي ففسٗ ثشای عشٚيظ گرئذٖ سا صيبد خٛا٘ذ وشد . دس
وٗ داؽت خٛإ٘ذ سا ثشداؽت ايٓ وبسثشاْ ِٛاسدی چٕني
ثشٔبِٗ وٕذ ٚ لبدس ثٗ اسائٗ پبعخ عشيغ ثٗ آٔبْ سمی ثبؽذ
، خقٛفب" دس ِٛاسدی وٗ استجبط ثني عشٚيظ گرئذٖ ٚ عشٚيظ
دٕ٘ذٖ اص عشيك يه خظ ثب عشػت پبئني ثشلشاس ؽذٖ ثبؽذ .
ػذَ اعتفبدٖ فسير اص state viewدس ثشخی ِٛاسد ِی تٛأذ
اداِٗ زيبت ِٛثش يه ثشٔبِٗ ٚة سا ثب چبٌؼ خذی ِٛاخٗ
سمبيذ . ايٓ ِٛضٛع دس ثشٔبِٗ ٘بئی وٗ اص وٕرتي ٘بی صيبدی
ٚ زدُ ثبالئی اص دادٖ سا دس خٛد دس يه ففسٗ اعتفبدٖ
ٔگٙذاسی ِی سمبيٕذ، ِضبػف ِی گشدد. دس چٕني ِٛاسدی دادٖ
: ِغتميّب" دس وذ دٚ ِشتجٗ ثٗ ففسٗ ٚة اضبفٗ ِی گشد
ِ HTMLشتجظ ثب وٕرتي ٚ جمذدا" دس يه فيٍذ خمفی ثشای view
. stateدادٖ فٛق ثب ٘ش back postثني عشٚيظ گرئذٖ ٚ عشٚيظ
دٕ٘ذٖ ِجبدٌٗ ِی گشدد .
ثب اعتفبدٖ اص ِ page tracingی تٛاْ اص تؼذاد ثبيتی وٗ view
. يبفت آگب٘ی وٕذ ِی ِقشف state
دس خبؼ دَٚ ثٗ ثشسعی عبيش ٔىبت ثٗ ِٕظٛس افضايؼ وبسآئی
ثشٔبِٗ ٘بی ٚة ثب شبشوض ثش سٚی ثبٔه ٘بی اعالػبتی دس صِبْ
عشازی خٛا٘يُ پشداخت .
افشايغ كارآئی بزَايّ ْای ٔب در 0.2 ( ASP.NETخبغ دٔو)
دس خبؼ اٚي ثٗ ايٓ ِٛضٛع اؽبسٖ گشديذ وٗ ثشای عشازی ٚ
اص سٚػ ٘ب ، تشفٕذ٘ب ٚ پيبدٖ عبصی يه ثشٔبِٗ ٚة وبسآ
7
Farsiplanet.com
فٕبٚسی ٘بی خمتٍفی اعتفبدٖ ِی گشدد . ثذيٓ ِٕظٛس حبث خٛد
سا ثب ِؼشفی عٗ حمٛس اعبعی صيش آغبص ٚ ثب شبشوض ثش سٚی
اٌٚني حمٛس اداِٗ دادمي .
: دس ايٓ ساثغٗ ثٗ جمّٛػٗ ای اص طزاحی بزای كارآئی
ٔىبت وٍيذی اؽبسٖ خٛا٘يُ وشد وٗ سػبيت آهنب دس صِبْ
عشازی ِی تٛأذ صِيٕٗ پيبدٖ عبصی يه ثشٔبِٗ ٚة وبسآ
سا فشاُ٘ سمبيذ .
تظت بزَايّ قبم اس ػًهياتی ػذٌ آٌ : يىی اص ِغبئً
ُِٙ دس استجبط ثب ثشٔبِٗ ٘بی ٚة ، ػذَ تغت آهنب ثب
ؽشايظ ِؾبثٗ ٚ يب ٔضديه ثٗ حميظ ٚالؼی اعت . دس ايٓ
ساعتب ِی تٛاْ اص ٔشَ افضاس٘ب ٚ يب اثضاس٘بی خمتٍفی
اعتفبدٖ وشد تب ثتٛاْ ػٍّىشد ٚ عشٚيظ د٘ی يه ثشٔبِٗ
سا لجً اص صيش ثبس سفنت ٚالؼی ِؾب٘ذٖ ٚ ثشسعی ٚة
ٚ اثضاس٘ب ساثغٗ دس ايٓ ؽشوت ِبيىشٚعبفت . سمٛد
ثشٔبِٗ ٘بی ِتؼذدی سا اسائٗ سمٛدٖ اعت وٗ ثٗ ثشسعی
آهنب خٛا٘يُ پشداخت .
پيادِ طاسی طيظتى : cachingثب پيبدٖ عبصی عيغتُ
تٛاْ ِی دادٖ caching ٚ ِتفبٚت عغٛذ دس caching
وبسآئی ثشٔبِٗ ٘بی ٚة سا ثغشص وبِال" حمغٛعی افضايؼ
داد. دس ايٓ خبؼ ثٗ رمٖٛ پيبدٖ عبصی عيغتُ cachingدس
ثشٔبِٗ ٘بی ٚة اؽبسٖ خٛا٘يُ وشد .
دس ايٓ خبؼ شمچٕبْ ثش سٚی اٌٚني حمٛس ِتّشوض ٚ ثٗ ثشسعی
ِغبئً دس استجبط ثب ثبٔه ٘بی اعالػبتی ٚ تبثري آهنب دس
وبسآئی يه ثشٔبِٗ ٚة اؽبسٖ خٛا٘يُ وشد .
دطتيابی بّ باَك اطالػاتی
8
Farsiplanet.com
لٛأني دعتيبثی ثٗ ثبٔه ٘بی اعالػبتی خيٍی عشساعت ٚ ِؾخـ
اعت ٌٚی ثٗ دٌيً ػذَ سػبيت ثشخی ٔىبت تٛعظ عشازبْ ٚ
پيبدٖ وٕٕذگبْ دمىٓ اعت وبسآئی ثشٔبِٗ ٘بی ٚة وب٘ؼ ٚ
شمضِبْ ثب افضايؼ وبسثشاْ اِىبْ اعتفبدٖ ذبيٕٗ ٚ ِغٍٛة اص
. ثبؽذ ٔذاؽتٗ ٚخٛد ثشٔبِٗ
لجً اص ثشسعی اُ٘ ِغبٌت ِشتجظ ثب ثىبسگريی ثبٔه ٘بی
اعالػبتی دس ثشٔبِٗ ٘بی ٚة الصَ اعت ثٗ ايٓ ٔىتٗ ُِٙ
اؽبسٖ گشدد وٗ ِی ثبيغت يه اتقبي ثٗ ثبٔه اعالػبتی سا
فشفب" دس صِبٔی وٗ ثٗ ٚخٛد آْ ٔيبص اعت اصمبد ٚ دس اٌٚني
فشفت دمىٓ آْ سا closeوشد چشاوٗ اٚال" تؼذاد اتقبالت ثٗ يه
ثبٔه اعالػبتی حمذٚد ٚ ثبٔيب" ِذيشيت آهنب وبس اضبفٗ ای سا
ٔيض ثٗ عشٚيظ دٕ٘ذٖ زبّيً خٛا٘ذ وشد ( اعتفبدٖ ذبيٕٗ اص
. ) حمذٚد ِٕجغ يه
ثب سػبيت ِٛاسد صيش ِی تٛاْ وبسآئی ثشٔبِٗ ٘بی ٚة سا
ذبجٛد خبؾيذ :
اطتفادِ اس : stored procedureعيغتُ ٘بی ِذيشيت ثبٔه
٘بی اعالػبتی ساثغٗ ای ٔظري SQL serverپيچيذگی ٘بی خبؿ
اذمبَ ثٗ لبدس فٛق، ٘بی عيغتُ . داسٔذ سا خٛد
وبس٘بی ِتٕٛػی ٘غتٕذ وٗ ثب اعتفبدٖ اص ASP.NETسمی
تٛاْ آهنب سا اذمبَ داد . ثىبسگريی ايٓ ٔٛع پتبٔغيً ٘ب
ِی تٛأذ تبثريات گغرتدٖ ای سا ثش سٚی ثشٔبِٗ ٘بی ٚة
ثٗ دٔجبي داؽتٗ ثبؽذ . ثٗ ػٕٛاْ سمٛٔٗ ، اعتفبدٖ اص
stored procedureدس ِمبثً ٘ Queryبی تٌٛيذ ؽذٖ پٛيب ِی
ثش سٚی وبسآيی ثشٔبِٗ تٛأذ تبثري غريلبثً أىبسی
٘بی ٚة داؽتٗ ثبؽذ چشاوٗ stored procedureسا ِی تٛاْ
ثشای اعتفبدٖ آتی تشمجٗ ٚ ذبيٕٗ عبصی وشد . تبثري
9
Farsiplanet.com
اعتفبدٖ اص stored procedureدس ِٛاسدی وٗ الصَ اعت
چٕذيٓ ػٍّيبت ِشتجظ ثٗ ُ٘ دس يه حلظٗ اذمبَ ؽٛد ،
ثغيبس ِؾٙٛد ٚ ٍِّٛط ِی ثبؽذ .
اطتفادِ اس پزٔفايهيُگ ٔ ايُذكض : تؼشيف ايٕذوظ ٘ب
ِٛسد ٔيبص ثگٛٔٗ ای وٗ ثب ٔٛع خغتدٛ ٚ خٛاعتٗ ٘بی
دس يه عيغتُ ِغبثمت سمبيذ ، ِی تٛأذ ٔتبيح ِٛسد ٔظش
سا ثب عشػت لبثً لجٌٛی دس اختيبس وبسثشاْ لشاس د٘ذ
. ثشای ذبيٕٗ عبصی ثی ػيت ايٕذوظ ٘ب دس يه ثبٔه
اعالػبتی الصَ اعت وٗ آهنب سا ثب اعتفبدٖ اص يه اثضاس
profilingاسصيبثی وشد ( ٔظري . ) SQL Server Profilerايٓ
ٔٛع اثضاس٘ب فؼبٌيت ثبٔه اعالػبتی سا دس يه الگ خبؿ
ثجت ِی سمبيٕذ ٚ دس اداِٗ ِی تٛاْ آْ سا ثشسعی ،
آٔبٌيض ٚ ثش اعبط ٔتبيح ثذعت آِذٖ دس ايٕذوظ ٘ب
ربذيذ ٔظش سمٛد . اثضاس٘بی فٛق ِی تٛإٔذ ِغبئٍی ٔظري
اخشای وٕذ queryسا ؽٕبعبئی ٚ زتی جمّٛػٗ ای خذيذ اص
ايٕذوظ ٘ب سا وٗ داسای وبسآئی دبشاتت ذبرتی ِی ثبؽٕذ ،
دٕ٘ذ . ثشای پشٚفبيً ذبرت ثبٔه اعالػبتی الصَ پيؾٕٙبد
اعت وٗ يه ٌٛد فشضی سا ثش سٚی ثشٔبِٗ ؽجيٗ عبصی
وشد.
يٕرد َياس : يىی اص عبدٖ باسيابی صزفا" اطالػات
تشيٓ سٚػ ٘بئی وٗ ثبػث ذبجٛد ٘ش ٔٛع وذ ثبٔه اعالػبتی
ِی گشدد ، وب٘ؼ زدُ اعالػبت ثبصيبثی ؽذٖ اص ثبٔه
اعالػبتی اعت . ايٓ وبس ثبػث وب٘ؼ ٌٛد ؽجىٗ ، ِذت
صِبْ الصَ ثشای ثبص ؽذْ اتقبي ٚ زدُ هنبئی ففسٗ ِی
گشدد . ثٗ ػٕٛاْ سمٛٔٗ ثب اعتفبدٖ اص فيٍرتيٕگ ِٕبعت
دس ٔ ( queryظري اعتفبدٖ اص تبسيخ ) ٚ ثبصيبثی فشفب"
فيٍذ٘بی ضشٚسی ، ِی تٛاْ زدُ دادٖ ثبصيبثی ؽذٖ سا
زتی ادلمذٚس وب٘ؼ داد .
01
Farsiplanet.com
اطتفادِ اس : connection poolingدس يه ثشٔبِٗ ٚة
ػِّٛی ، عيغتُ ِذيشيت ثبٔه اعالػبتی دسخٛاعت ٘بی
ثيؾّبسی سا اص عشف عشٚيظ گرئذگبْ ثشای ففسبت ٚة
ِتؼذد دسيبفت ِی سمبيذ . ِؼّٛال" ايٓ اتقبالت ثشای ِذت
صِبْ وٛتب٘ی فؼبي ٚ اصمبد آهنب يىی اص ِشازً ٚلت گري
دس صِبْ پيبدٖ عبصی اعت . دس فٛستی وٗ ٘ش ففسٗ ٚة
اص ِ connection stringؾبثٗ اعتفبدٖ سمبيذ ، ثبٔه ٘بی
connection اعالػبتی ٔظري SQL serverلبدس ثٗ اعتفبدٖ اص
تؼجيٗ ؽذٖ دس خٛد ثشای اعتفبدٖ جمذد اص يه pooling
اتقبي ثشای ثيؼ اص يه عشٚيظ گرئذٖ ِتٛاٌی ِی ثبؽٕذ
connection stringثٗ . ثذيٓ تشتيت اِىبْ اعتفبدٖ اص
دفؼبت فشاُ٘ ِی گشدد. ايٓ وبس ثغشص چؾّگريی ثبػث
ذبجٛد عشػت ِی گشدد . دس چٕني ِٛاسدی ِی تٛاْ اص فبيً
web.configثشای رخريٖ connection stringاعتفبدٖ تب اِىبْ
ثىبسگريی آهنب دس ففسبت ِتؼذد يه ثشٔبِٗ ٚة فشاُ٘
گشدد.
اطتفادِ اس : date bindingعشيؼرتيٓ سٚػ ثبصيبثی ٚ
، اعتفبدٖ اص يه سمبيؼ اعالػبت اص يه ثبٔه اعالػبتی
ٚ DataReaderيب ٔ ٚ Datasetغجت د٘ی ِغتميُ آْ ثٗ يه
وٕرتي دادٖ اعت . سٚيىشد فٛق دمىٓ اعت ثٗ ػٍّيبت
ثيؾرتی خٙت اعتفبدٖ اص شبپٍيت ٘بی عفبسؽی ٔيبص داؽتٗ
ثبؽذ ٌٚی ايٓ ٚضؼيت دبشاتت ذبرت اص زبٌتی اعت وٗ ثغٛس
دعتی ثني عغش٘ب ( سوٛسد٘ب ) زشوت ٚ آهنب سا دس ففسٗ
ِٛسد ٔظش لشاس داد.
اطتفادِ اس : cachingدس فٛستی وٗ جمّٛػٗ ای خبؿ اص
دادٖ ِتٕبٚثب" دسخٛاعت ٚ ثٕذست تغيري ِی يبثذ ، ِی
تٛاْ آهنب سا خٙت اعتفبدٖ آتی cacheسمٛد . ثب اعتفبدٖ
دس اٌٚني ِشتجٗ ای وٗ يه عشٚيظ اص عيغتُ ، caching
11
Farsiplanet.com
گرئذٖ دسخٛاعت اعالػبت سا ِی سمبيذ ، اعالػبت دسخٛاعتی
اص ثبٔه اعالػبتی خٛأذٖ ؽذٖ ٚ دس زبفظٗ ِٛلت لشاس
اص ِغتميُ اعتفبدٖ اِىبْ تشتيت ثذيٓ . گرئذ ِی
ثبٔه ثٗ دعتيبثی ضشٚست ثذْٚ ؽذٖ cache اعالػبت
دس خبؼ ٘بی ثؼذی ثٗ ثشسعی اعالػبتی فشاُ٘ ِی گشدد .
data caching ٚ Output cachingخٛا٘يُ پشداخت .
session state
session stateيىی اص ثضسگرتيٓ حمذٚديت ٘بی تبثري گزاس دس
ثشٔبِٗ ٘بی ٔٛؽتٗ ؽذٖ ثب اعتفبدٖ اص ASP خقٛؿ وبسآئی
والعيه اعت . ثب ايٓ وٗ دس ٚ ASP.NETيژگی ٘بی خذيذی ثٗ
ٌٚی شمچٕبْ ِٕظٛس ذبجٛد وبسوشد session stateاسائٗ ؽذٖ اعت
الصَ اعت وٗ اص آْ ثب دلت اعتفبدٖ گشدد .
اگش فشفب" IDيه خشيذاس وبال سا دس session stateرخريٖ وشدٖ
ثبؽيُ، دسگري ِغبئٍی خبؿ زمٛا٘يُ ؽذ . دس چٕني ِٛاسدی ِی
تٛاْ يه عجذ خشيذ وبالی اٌىرتٚٔيىی سا ثب رخريٖ ٌيغتی اص
حمقٛالت أتخبثی تٛعظ خشيذاس اصمبد سمٛد . دس فٛستی وٗ لقذ
رخريٖ زدُ ثبالئی اص اعالػبت ٔظري يه Datasetسا داؽتٗ ثبؽيُ
، ِی ثبيغت دس ايٓ ساثغٗ دلت ٚ تبثري آْ سا ثش سٚی
ِٛفميت ثشٔبِٗ ثشسعی وشد . ثٗ ػٕٛاْ سمٛٔٗ ، دس فٛستی وٗ
٘ش sessionفضبئی ثٗ ِيضاْ يه ِگبثبيت سا اعتفبدٖ سمبيذ ،
يىقذ sessionشمضِبْ ثبػث اعتفبدٖ 110 ِگبثبيت اص زبفظٗ
خٛا٘ذ ؽذ .
21
Farsiplanet.com
ثشای زً ايٓ ٔٛع اص ِؾىالت ، دس صِبْ عشازی ِی تٛاْ ثش
اعبط يىی اص دٚ گضيٕٗ ٘بی صيش تقّيُ گريی سمٛد :
ثبٔه سوٛسد يه دس ٔيبص ِٛسد اعالػبت شببِی رخريٖ
سوٛسد ِٛسد ٔظش دس يه . session اعالػبتی ٚ رخريٖ ID
سٚػ فٛق ثبػث فشفٗ خٛئی دس ِقشف زبفظٗ ِی گشدد ٌٚی
عشػت ثشٔبِٗ سا وب٘ؼ خٛا٘ذ داد ( ثب تٛخٗ ثٗ فشآيٕذ
دعتيبثی ثٗ ثبٔه اعالػبتی وٗ يىی اص ػٕبفش ُِٙ ٚ
تبثريگزاس دس خقٛؿ وبسآئی ثشٔبِٗ ٘بی ٚة اعت ) .
ثٗ ػٕٛاْ يه ساٖ زً ذبرت ِی تٛاْ اعالػبت ِٛسد ٔظش سا
دس يه سوٛسد ثبٔه اعالػبتی رخريٖ ٚ دس اداِٗ ثشخی اص
اعالػبت سا دس زبفظٗ cacheسمٛد . ثذيٓ تشتيت ، اِىبْ
ثبصيبثی اعالػبت ثب عشػت ثيؾرتی فشاُ٘ ِی گشدد . دس
خبؼ ٘بی ثؼذی ثب caching dataثيؾرت آؽٕب خٛا٘يُ ؽذ .
ذبرتيٓ سٚػ ٚ يب گضيٕٗ ثشای رخريٖ ، sessionاعتفبدٖ اص سٚػ
in-processاعت وٗ ثٗ فٛست پيؼ فشك دس ٔظش گشفتٗ ِی ؽٛد .
ثشای رخريٖ ِ sessionی تٛاْ اص سٚػ ٘بی ديگشی ٔظري يه ثبٔه
اعالػبتی ٔ SQLيض اعتفبدٖ سمٛد . اعتفبدٖ اص سٚػ فٛق
دس ِٛاسدی پشداصػ ٘بی ثيؾرتی سا ثٗ عيغتُ زبّيً ٚ فشفب"
وٗ ٚة عبيت ِٛسد ٔظش دس يه web farmثٗ شمشاٖ چٕذيٓ عشٚيظ
دٕ٘ذٖ ٘بعت ؽذٖ ثبؽذ ، تٛفيٗ ِی گشدد .
حمٕر دٔو : تظت بزَايّ قبم اس ػًهياتی ػذٌ آٌ ٔ يا
) Profiling ( پزٔفايهُگ
ثشای لضبٚت دس خقٛؿ تالػ ٘بی اذمبَ ؽذٖ دس استجبط ثب ذبجٛد
وبسآئی يه ثشٔبِٗ ٚة ، ِی ثبيغت لبدس ثٗ عٕدؼ وبسآئی آْ
دس ِٛاسدی وٗ وبسآئی يه ثشٔبِٗ وٕذ ٚ دس ػًّ ثبؽيُ .
31
Farsiplanet.com
ٔباِيذ وٕٕذٖ اعت ، ِی ثبيغت ثش اعبط اعالػبت وبفی الذاَ
گشٖ ٘ب ٚ ػٛاًِ تبثري گزاس ثش سٚی وبسآئی ثٗ ؽٕبعبئی
ثشٔبِٗ ٘بی ٚة سمبئيُ تب اص ايٓ س٘گزس ثتٛأيُ ِؾىً ٚ يب
ِؾىالت سا ثشعشف ٚ يه ثشٔبِٗ ٚة وبسآ سا آِبدٖ اعتفبدٖ
. سمبئيُ هنبئی ٚ ػٍّيبتی
دس خبؼ عَٛ ثٗ ثشسعی اِىبٔبت ٚ اثضاس٘بی ِٛخٛد ثشای تغت
ثشٔبِٗ ٘بی ٚة خٛا٘يُ پشداخت .
افشايغ كارآئی بزَايّ ْای ٔب در 0.2 ( ASP.NETخبغ طٕو)
ٚ دَٚ ثٗ جمّٛػٗ ای اص ٔىبت اؽبسٖ گشديذ دس خبؼ ٘بی اٚي
وٗ سػبيت آهنب دس صِبْ عشازی ِی تٛأذ صِيٕٗ پيبدٖ عبصی
يه ثشٔبِٗ ٚة وبسآ سا فشاُ٘ سمبيذ . دس ايٓ خبؼ ثٗ ثشسعی
ٚة ٘بی ثشٔبِٗ تغت ثشای ِٛخٛد اثضاس٘بی ٚ اِىبٔبت
. پشداخت خٛا٘يُ
يىی اص ِغبئً ُِٙ دس استجبط ثب ثشٔبِٗ ٘بی ٚة ، ػذَ تغت
ٔضديه ثٗ حميظ ٚالؼی اعت . دس آهنب ثب ؽشايظ ِؾبثٗ ٚ يب
ايٓ ساعتب ِی تٛاْ اص ٔشَ افضاس٘ب ٚ يب اثضاس٘بی خمتٍفی
اعتفبدٖ وشد تب ثتٛاْ ػٍّىشد ٚ عشٚيظ د٘ی يه ثشٔبِٗ ٚة
سا لجً اص صيش ثبس سفنت ٚالؼی ِؾب٘ذٖ ٚ ثشسعی سمٛد .
ثشای لضبٚت دس خقٛؿ تالػ ٘بی اذمبَ ؽذٖ دس استجبط ثب ذبجٛد
وبسآئی يه ثشٔبِٗ ٚة ، ِی ثبيغت لبدس ثٗ عٕدؼ وبسآئی آْ
دس ِٛاسدی وٗ وبسآئی يه ثشٔبِٗ وٕذ ٚ دس ػًّ ثبؽيُ .
ٔباِيذ وٕٕذٖ اعت ، ِی ثبيغت ثش اعبط اعالػبت وبفی الذاَ
گشٖ ٘ب ٚ ػٛاًِ تبثري گزاس ثش سٚی وبسآئی ثٗ ؽٕبعبئی
ثشٔبِٗ ٘بی ٚة سمبئيُ تب اص ايٓ س٘گزس ثتٛاْ ِؾىً ٚ يب
ِؾىالت سا ثشعشف ٚ يه ثشٔبِٗ ٚة وبسآ سا آِبدٖ اعتفبدٖ
41
Farsiplanet.com
. وشد هنبئی ٚ ػٍّيبتی
ؽشوت ِبيىشٚعبفت دس ايٓ ساثغٗ اثضاس٘ب ٚ ثشٔبِٗ ٘بی
ِتؼذدی سا اسائٗ سمٛدٖ اعت وٗ دس اداِٗ ثٗ ثشسعی آهنب
خٛا٘يُ پشداخت .
Stress Testing
پيبدٖ وٕٕذگبْ ثشٔبِٗ ٘بی ٚة ِی تٛإٔذ اص اثضاس٘بی تغت
ِتؼذد ثٗ شمشاٖ ثشخی اِىبٔبت اسائٗ ؽذٖ دس فشميٛسن دات ٔت
ثشای پشٚفبيً وشدْ ثشٔبِٗ ٘بی ASP.NETاعتفبدٖ سمبيٕذ .
اػّبي يه پً استجبعی ثني اغٍت ، گزس اص ِشزٍٗ تغت ٚ
ٔتبيح تغت ٚ ثشٔبِٗ ٚة وبس صِبْ گريی اعت . ثٗ ػٕٛاْ
سمٛٔٗ دمىٓ اعت دس ِشزٍٗ تغت ثتٛاْ اعالػبت ِّٙی ٔظري TTFB
( ثشگشفتٗ ؽذٖ اص ) first byte Average Time toوٗ ٔؾبْ دٕ٘ذٖ
ِذت صِبْ اسعبي دسخٛاعت ٚ دسيبفت اٌٚني ثبيت اص عشٚيظ
Average Time to last دٕ٘ذٖ اعت ٚ يب ( TTLBثشگشفتٗ ؽذٖ اص
صِبْ اسعبي دسخٛاعت ٚ دسيبفت ٔؾبْ دٕ٘ذٖ ) وٗ byte
آخشيٓ ثبيت اص عشٚيظ دٕ٘ذٖ اعت سا سوٛسد ٚ ثجت سمٛد .
ٌٚی ثذْٚ اعتفبدٖ اص يه سٚػ دليك ٚ فسير أذاصٖ گريی ،
تؾخيـ پبساِرت٘بی تبثريگزاس دس وب٘ؼ وبسآئی يه ثشٔبِٗ ٚة
. ثٛد خٛا٘ذ ِؾىٍی وبس
ثٗ ػٕٛاْ ِثبي ، وب٘ؼ وبسآئی يه ثشٔبِٗ ٚة دمىٓ اعت
ِشثٛط ثٗ عشػت پبئني ٘بسد ديغه ، تٕظيّبت ضؼيف ، ASP.NET
ػذَ عشازی فسير ثبٔه اعالػبتی ٚ يب ػذَ عشازی ِٕبعت
ثشٔبِٗ ثبؽذ . دس ٚالغ، تغت وبسآئی ػٍُ ٚ دأؼ خمتـ ثٗ
. داسد سا خٛد
51
Farsiplanet.com
ثشای اذمبَ اوثش تغت ٘بی اٌٚيٗ ، ِی تٛاْ اص يه عشٚيظ
دٕ٘ذٖ اختقبفی ٚ جمّٛػٗ ای اص عشٚيظ گرئذگبْ اعتفبدٖ سمٛد
وٗ اص عشيك يه ؽجىٗ عشيغ ايضٌٚٗ ؽذٖ ثب عشٚيظ دٕ٘ذٖ ٚة
تؼبًِ ثشلشاس ِی سمبيٕذ . ثذيٓ ِٕظٛس ِی تٛاْ اص يه
اثضاس تٌٛيذ loadوٗ ثغٛس اتِٛبتيه جمّٛػٗ ای اص ففسبت سا
اص عشٚيظ دٕ٘ذٖ دسخٛاعت ِی سمبيذ اعتفبدٖ وشد تب يه ٌٛد
Application عٕگني ؽجيٗ عبصی گشدد . ( ACTثشگشفتٗ ؽذٖ اص
Web Applications ( WASTثشگشفتٗ ؽذٖ اص ٚ ) Center Test
. ) Stress Toolدٚ سمٛٔٗ ِتذاٚي دس ايٓ صِيٕٗ ِی ثبؽٕذ
ثب اعتفبدٖ اص اثضاس٘بی فٛق ِی تٛاْ ؽشايظ زبوُ ثش يه
ثشٔبِٗ ٚة دس دٔيبی ٚالؼی سا ؽجيٗ عبصی سمٛد ( تذاَٚ
دسخٛاعت ففسبت اص عشيك چٕذيٓ اتقبي شمضِبْ ) . اوثش
اثضاس٘بی تٌٛيذ ، loadفؼبٌيت ٘ب ٚ وبس٘بئی سا وٗ اذمبَ
ِی دٕ٘ذ ثجت ِی سمبيٕذ تب اِىبْ ثشسعی آهنب تٛعظ عشازبْ ٚ
. ثبؽذ داؽتٗ ٚخٛد وٕٕذگبْ پيبدٖ
ػالٖٚ ثش ثشٔبِٗ ٘بی فٛق ، ِی تٛاْ ٔتبيح سا ثب اعتفبدٖ
اص Windows performance countersثجت ٚ ِؾب٘ذٖ وشد .
performance counter
ثشٔبِٗ ٚ performance countersيٕذٚص يىی اص اثضاس٘بی ِتذاٚي
ِٛخٛد ثشای أذاصٖ گريی وبسآئی يه ثشٔبِٗ ِی ثبؽذ . ثب
اعتفبدٖ اص ثشٔبِٗ فٛق ِی تٛاْ ثٗ تؼذاد دخلٛاٖ counterسا
اضبفٗ ٚ يب ِغتميّب" وبسآئی سا اص عشيك خؼجٗ حمبٚسٖ ای
. وشد گريی أذاصٖ system performance
ثشای فؼبي وشدْ ثشٔبِٗ فٛق ِی تٛاْ اص ِغري Settings|Control
ايٓ وشد. اعتفبدٖ Panel |Administrative Tools |Performance
پشداصؽگش افٍی ثٗ فٛست پيؼ فشك فشفب" وبسآئی ثشٔبِٗ
. سمبيذ ِی گريی أذاصٖ سا ديغه ٚ عيغتُ
61
Farsiplanet.com
پظ اص ٔقت ، ASP.NETجمّٛػٗ ای ِ counterفيذ ثشای سديبثی ٚ
اسصيبثی وبسآئی ثشٔبِٗ ٘بی ٚة ٔيض ٔقت ِی گشدد . ثشای
ثش سٚی ٌيغت اضبفٗ وشدْ ، counterثب وٍيه (مست ساعت)
ٚ counterأتخبة ِ ، propertiesی تٛاْ گضيٕٗ ٘بی خمتٍفی سا
پيىشثٕذی سمٛد ( ٔظري تغيري ؽىً ظب٘شی سمٛداس ٚ رمٖٛ ثجت
. ) گضاسػ يه لبٌت دس اعالػبت
يىی اص ِّٙرتيٓ گضيٕٗ ٘ب خبؼ ِشثٛط ثٗ Dataاعت وٗ ثب
يه counterسا اعتفبدٖ اص آْ ِی تٛاْ ثٗ ٌيغت ِٛخٛد
اضبفٗ ٚ يب اص آْ ززف سمٛد . ثشای ؽشٚع ، ِی تٛاْ شببِی
وبٔرت ٘بی پيؼ فشك سا ززف ٚ ثب اعتفبدٖ اص گضيٕٗ Add
ِٛاسد دخلٛاٖ سا ثٗ ٌيغت اضبفٗ سمٛد .
ؽىً 0 : اضبفٗ وشدْ يه counterخذيذ
اص مجٍٗ دس خؼجٗ حمبٚسٖ ای ، Add Counterچٕذيٓ ٚيژگی ُِٙ
اِىبْ ِؾخـ وشدْ ٔبَ وبِپيٛتش ٚخٛد داسد . ثٗ ػجبست
ديگش ، مشب ِی تٛأيذ وبسآئی يه وبِپيٛتش ساٖ دٚس سا
ِبٔيتٛس سمبئيذ . ِبٔيتٛسيٕگ وبسآئی عشٚيظ دٕ٘ذٖ ٚة اص
عشيك يه عشٚيظ گرئذٖ ايذٖ آي اعت چشاوٗ ازتّبي تبثري
ػٍّىشد ِبٔيتٛسيٕگ ثش سٚی عشٚيظ دٕ٘ذٖ اص ثني خٛا٘ذ سفت
. ٚيژگی ُِٙ ثؼذی ، performance objectاعت وٗ ثب اعتفبدٖ
71
Farsiplanet.com
اص آْ ِی تٛاْ يه گشٖٚ counterسا ِتٕبعت ثب ؽی ِٛسد ٔظش
أتخبة سمٛد . گشٖٚ ASP.NETاعالػبت وبٍِی سا دس خقٛؿ
وبسآئی وٍی ثشٔبِٗ ٘بی ASP.NETاسائٗ ِی سمبيذ . ايٓ دس
زبٌی اعت وٗ گشٖٚ ASP.NET Applicationاعالػبتی سا دس ساثغٗ
. سمبيذ ِی اسائٗ خبؿ ٚة ثشٔبِٗ يه ثب
ثشخی اص أٛاع ِفيذ وبٔرت٘ب ثٗ شمشاٖ گشٖٚ ، ٔبَ ٚ counter
ػٍّىشد ٘ش يه اص آهنب دس خذٚي 0 ٔؾبْ دادٖ ؽذٖ اعت .
عغش٘بی عتبسٖ داس، وبٔرت٘بئی سا ِؾخـ ِی سمبيذ وٗ ثب
اعتفبدٖ اص آهنب ِی تٛاْ اؽىبي صدائی يه ِغئٍٗ سا اذمبَ
داد . عبيش عغش٘ب ، وبٔرت٘بئی سا ٔؾبْ ِی د٘ذ وٗ اعتفبدٖ
اص آهنب شمٛاسٖ ِفيذ ِی ثبؽذ .
گشٖٚ counter ػٍّىشد
اص اعتفبدٖ دسفذ
CPUسا ٔؾبْ ِی د٘ذ
وٗ فٛستی دس .
اعتفبدٖ اص CPUدس
صِبٔی ثبصٖ يه
load اص فشفٕظش
processor % CPU Utilization
ثبثت گرئذٖ عشٚيظ
ٔؾبْ ، دببٔذ ثبلی
يه أتظبس دٕ٘ذٖ
ثشای ثشٔبِٗ
اعتفبدٖ اص يه ِٕجغ
حمذٚد اعت .
ASP.NET Requests Queued
٘بی دسخٛاعت تؼذاد
81
Farsiplanet.com
پشداصػ أتظبس دس
سا ِؾخـ ِی سمبيذ .
اص counterفٛق ثشای
زذاوثش وشدْ ِؾخـ
loadعشٚيظ دٕ٘ذٖ ٚة
اعتفبدٖ ِی گشدد .
وٗ دفؼبتی تؼذاد
ساٖ ASP.NET پشداصٖ
يب ٚ جمذد أذاصی
* Application
سا گشدد ِی reset
Restarts ,
ASP.NET
Worker ايٓ Process ِؾخـ ِی سمبيذ .
ٔؾبٔذٕ٘ذٖ Restarts counter
ِغبئً ثشٚص
ٔبخٛاعتٗ اعت.
تٛاْ زذاوثش
ASP.NET ٚة ثشٔبِٗ ػٍّيبتی
Requests/Sec
Applications
سا ِؾخـ ِی سمبيذ .
تٌٛيذ خغبء تؼذاد
ؽذٖ تٛعظ يه ثشٔبِٗ
ٚة سا ِؾخـ ِی سمبيذ
ASP.NET . ِمذاس ايٓ counter
* Errors Total
Applications
ثبيغت ِی ػًّ دس
ففش ٚ يب ٔضديه ثٗ
ففش ثبؽذ .
دسخٛاعت تؼذاد
pipelineيه ثشٔبِٗ سا
ASP.NET Pipeline Instance
Applications اص Count ِؾخـ ِی سمبيذ ٚ
ؽذْ ِؾخـ ثشای آْ
91
Farsiplanet.com
دسخٛاعت زذاوثش
شمضِبٔی وٗ ِی تٛاْ
دادٖ پبعخ آهنب ثٗ
ِی اعتفبدٖ ، ؽٛد
. گشدد
دس فٛستی وٗ ِمذاس
يه زبت counter ايٓ
، ثبؽذ پبئني load
ٔؾبْ دٕ٘ذٖ اعتفبدٖ
ِغٍٛة اص CPUاعت .
تؼذاد فٛق پبساِرت
عٛئيچيٕگ دفؼبت
thread contextسا ٔؾبْ
ِی د٘ذ . دس فٛستی
ايٓ ِمذاس وٗ
* Context
System پبساِرت صيبد ثبؽذ ،
Switches/sec
٘ threadبی خمتٍف ثشای
اعتفبدٖ اص يه ِٕجغ
يىذيگش ثب حمذٚد
سلبثت ِی سمبيٕذ .
خذٚي 0 : ٌيغت ثشخی وبٔرت٘بی ِفيذ
كالص ْای performance countersاس طزيق كذ دطتيابی بّ
ثب تٛخٗ ثٗ ايٓ وٗ ASP.NETخبؾی اص فشميٛسن دات ٔت اعت ،
پيبدٖ وٕٕذگبْ ثشٔبِٗ ٘بی ٚة ِی تٛإٔذ دس ففسبت ٚة
ٔٛؽتٗ ؽذٖ ثب اعتفبدٖ اص فٕبٚسی ASP.NETثٗ شببِی والط ٘بی
ِٛخٛد دس فشميٛسن دات ٔت دعتيبثی داؽتٗ ثبؽٕذ . ايٓ ثذاْ
02
Farsiplanet.com
ِؼٕی اعت وٗ اص عشيك يه ففسٗ ٚة ِ ASP.NETی تٛاْ ػٍّيبت
يب ٚ event log دس ٔٛؽنت ، تقبٚيش پشداصػ ٔظري ِتؼذدی
خٛأذْ ٚ أؼىبط counters performanceدس خشٚخی سا اذمبَ داد
. گشچٗ اعتفبدٖ اص اِىبٔبتی اص ايٓ لجيً دمىٓ اعت چبٌؼ
٘بی إِيتی خمتـ ثٗ خٛد سا داسا ثبؽذ ٌٚی ثب سػبيت ٔىبت
اميٕی ِی تٛاْ پتبٔغيً ثشٔبِٗ ٘بی ٚة سا دس خٙت اسائٗ
خذِبت ِغٍٛة ٚ ذبيٕٗ ثٗ وبسثشاْ افضايؼ داد .
خذيذ سا ثٗ ػٕٛاْ سمٛٔٗ ِی تٛاْ يه performance counter
اضبفٗ ٚ يب ِمذاس ِتٕبظش ثب يه performance counterسا
ثبصيبثی ٚ دس اداِٗ آْ سا دس يه ففسٗ ٚة ٚ يب يه ثشٔبِٗ
desktopسمبيؼ داد .
ثشای اعتفبدٖ اص پتبٔغيً فٛق ، اص namespaceثب ٔبَ
System.Diagnosticsاعتفبدٖ ِی گشدد . ٌيغت ثشخی اص والط ٘بی
خذٚي 2 دات ٔت ثٗ ِٕظٛس تؼبًِ ثب performance counterدس
ٔؾبْ دادٖ ؽذٖ اعت .
والط ػٍّىشد
يه اسائٗ
counterخبؿ وٗ
اعالػبتی ؽبًِ
ٔظري ٔبَ counter
PerformanceCounter
ٚ ٔٛع دادٖ ئی
ِی وٗ اعت
ثجت ثبيغت
گشدد .
12
Farsiplanet.com
يه گشٖٚ counter
سا وٗ ؽبًِ يه
چٕذيٓ يب ٚ
PerformanceCounterCategory
، اعت counter
سمبيذ ِی ِؾخـ
.
دادٖ اسائٗ
ٔيبص ِٛسد
يه CounterCreationData اصمبد ثشای
counterخذيذ .
اسائٗ جمّٛػٗ
ای اص اعالػبت
ثجت ؽذٖ تٛعظ
. counter
دس ايٓ ساثغٗ
يه ( RawValue
مشبسٖ ثجت ؽذٖ
) ، يه
( TimeStamp
CounterSample
صِبٔی وٗ
ِمذاس ثجت ؽذٖ
اعت ) ٚ
اعالػبت اضبفٗ
ای دس ساثغٗ
ثب ٔٛع counter
ٚ رمٖٛ خٛأذْ
آْ سا اسائٗ
ِی سمبيذ .
22
Farsiplanet.com
ثب وبس ثشای ٔت دات ٘بی والط ثشخی ٌيغت : 2 خذٚي
Performance counter
يثال : منايغ ظزفيت آساد حافظّ فيشيكی در يك صفحّ ٔب
دس وذ فٛق ، ظشفيت آصاد زبفظٗ فيضيىی ثش زغت ِگبثبيت دس
ففسٗ ٚة سمبيؼ دادٖ ِی ؽٛد . ثشای اذمبَ ايٓ وبس ، دس
ٖٚ ثٗ شمشاٖ ٔبَ گشPerformanceCounter اثتذا يه سمٛٔٗ اص والط
. اصمبد ؽذٖ اعت Available MBytes َ ثب ٔبcounter ٚ Memory
اص وذ صيشPerformanceCounter ثشای اصمبد يه سمٛٔٗ اص والط
. اعتفبدٖ ؽذٖ اعت
Dim perfFreeMem as New
PerformanceCounter("Memory", "Available MBytes")
Performance ٗ اصمبد وperfFreeMem َثذيٓ تشتيت يه ؽی ثب ٔب
ِٛسد ٔظش سا اسائٗ ِی سمبيذ . ثشای خٛأذْ ِمذاس counter
اعتفبدٖ ِی گشدد تب ِمذاسNextValue اص ِتذcounter خبسی
سا ثشگشدأذ . ثب ٔغجت دادْ ِمذاسPerformance counter ثؼذی
، Label ٖ وٕرتي عشٚيظ دٕ٘ذText ثشگشدأذٖ ؽذٖ ثٗ خقٍت
. اِىبْ ِؾب٘ذٖ آْ دس خشٚخی فشاُ٘ ِی گشدد
sub Page_Load(sender as Object, e as EventArgs)
Dim perfFreeMem as New
PerformanceCounter("Memory", "Available MBytes")
lblFreeMem.Text = perfFreeMem.NextValue()
end sub
23
Farsiplanet.com
:)Free Memory (in MB
>/ "% "VaryByParam="None
>"/ lblDate.Text = "The time is now:/ "% "VaryByParam="None
VaryByParam ٚ Duration خقٍت دٚ اص فٛق دايشوتيٛ دس
اعتفبدٖ ؽذٖ اعت . خقٍت Durationثٗ ASP.NETاػالَ ِی سمبيذ
وٗ ففسٗ سا ثٗ ِذت 12 ثبٔيٗ cacheسمبيذ. خقٍت VaryByParam
ِيضاْ ٚاثغتگی فشآيٕذ cachingسا ثٗ يه ٚ يب چٕذيٓ پبساِرت
ِؾخـ ِی سمبيذ . دس ثشخی ِٛاسد دمىٓ اعت ايٓ ٚاثغتگی ُِٙ
ٔجبؽذ ٚ ِمذاس آْ Noneدس ٔظش گشفتٗ ؽٛد ( شمبٕٔذ ِثبي
فٛق ) .
پظ اص رخريٖ وذ فٛق دس فبيٍی ثب ٔبَ ٚ CacheExample1.aspx
اخشاء آْ ، ٔتبيح خبٌت ٚ لبثً تٛخٗ ای سا ِؾب٘ذٖ خٛا٘يُ
وشد . اٌٚني ِشتجٗ ای وٗ ففسٗ دسخٛاعت ِی گشدد ، تبسيخ ٚ
صِبْ خبسی دس خشٚخی سمبيؼ دادٖ ِی ؽٛد .دس فٛستی وٗ پظ
اص گزؽت ِذت صِبْ ثغيبس وٛتب٘ی ففسٗ سا refreshسمبئيُ ،
خشٚخی ففسٗ ذبٕگبَ زمٛا٘ذ ؽذ . دس ِمبثً ، ASP.NETثغٛس
اتِٛبتيه خشٚخی ٔغخٗ cacheؽذٖ سا اسعبي خٛا٘ذ وشد .
ٚ پظ اص ٚضؼيت فٛق ثٗ ِذت 12 ثبٔيٗ اداِٗ خٛا٘ذ يبفت
اشببَ تبسيخ ِقشف ٔغخٗ cacheؽذٖ ، ASP.NETجمذدا" وذ ففسٗ
سا اخشاء ٚ يه ٔغخٗ خذيذ cacheسا اصمبد ٚ اص آْ ثٗ ِذت
12 ثبٔيٗ ديگش اعتفبدٖ خٛا٘ذ وشد .
03
Farsiplanet.com
ؽبيذ ثٕظش 12 ثبٔيٗ صِبْ صيبدی ٔجبؽذ ٌٚی ثشای عبيتی وٗ
زبٚی اعالػبت گغرتدٖ ای خٙت اسائٗ ثٗ وبسثشاْ ِتؼذد اعت ،
ايٓ ِٛضٛع ِی تٛأذ وبِال" ِتفبٚت ثبؽذ. ثٗ ػٕٛاْ سمٛٔٗ ،
ثٗ ػشضٗ لبثً حمقٛالت اص ٌيغتی خٛا٘يُ ِی وٕيذ فشك
وبسثشاْ سا دس يه ففسٗ سمبيؼ د٘يُ . ثب cachingففسٗ ثٗ
ِذت 12 ثبٔيٗ ، دعتيبثی ثٗ ثبٔه اعالػبتی حمذٚد ثٗ عٗ
ػٍّيبت دس يه دليمٗ ِی گشدد . ثذْٚ ، cachingثشای ٘ش
وبسثشی وٗ ِتمبضی ِؾب٘ذٖ ٌيغت حمقٛالت اعت ، ِی ثبيغت
فشآيٕذ استجبط ثب ثبٔه اعالػبتی ٚ سمبيؼ حمقٛالت دس يه
عبختبس سمبيؾی ِٕبعت ( ٔظري ) Gridviewاذمبَ ؽٛد . ثذيٙی
اعت ثب cachingففسٗ ثٗ ِذت 12 ثبٔيٗ اِىبْ پبعخگٛئی ثٗ
دٖ ٘ب دسخٛاعت دس ِذت صِبْ فٛق ٚ ثذْٚ ٔيبص ثٗ دٔجبي
وشدْ فشآيٕذ استجبط ثب ثبٔه اعالػبتی ٚ سمبيؼ دادٖ اذمبَ
ِی ؽٛد .
تٛخٗ داؽتٗ ثبؽيذ وٗ اگش ِذت صِبْ زضٛس يه ٔغخٗ cache
دس زبفظٗ 12 ثبٔيٗ تؼيني ؽذٖ ثبؽذ ، ايٓ ثذاْ ِؼٕی زمٛا٘ذ
ثٛد وٗ ٚالؼب" دس عی ِذت صِبْ فٛق ٔغخٗ cacheؽذٖ دس
زبفظٗ ٚخٛد خٛا٘ذ داؽت . ففسٗ ِٛسد ٔظش دمىٓ اعت دس اٌٚني
ثٗ ِٕظٛس اذمبَ وبس٘بی اعبعی تش خٛد ثب فشفتی وٗ عيغتُ
وّجٛد زبفظٗ ِٛاخٗ ؽٛد اص آْ خبسج گشدد . ثذيٓ تشتيت ،
cache اص آعٛدٖ خيبٌی ثب تٛإٔذ ِی وٕٕذگبْ پيبدٖ
اعتفبدٖ سمبيٕذ ثذْٚ ايٓ وٗ ٔگشاْ تبخري دس اخشای ثشٔبِٗ
ثٗ دٌيً اعتفبدٖ اص ػٕقش زيبتی زبفظٗ تٛعظ cacheثبؽٕذ.
صِبٔی وٗ يه ففسٗ cacheؽذٖ جمذدا" تشمجٗ ِی گشدد ، ASP.NET
13
Farsiplanet.com
ثغٛس اتِٛبتيه ففسٗ سا اص cacheخبسج ِی سمبيذ . ثذيٓ
تشتيت اص ثشٚص ِغبئٍی ٔظري ػذَ ٚخٛد ٔغخٗ ذبٕگبَ ؽذٖ
. آيذ ِی ثؼًّ دمبٔؼت cache دس
دس صِبْ تغت ثشٔبِٗ ذبرت اعت وٗ cachingغري فؼبي گشدد . دس
صِبْ اعتفبدٖ اص سٚػ ٘ب ٚ تىٕيه ٘بی اؽىبي صدائی ٔظري
breakpointدمىٓ اعت ثب ٚ يب اصمبد ٔمبط ِتغري٘بی watch
ِؾىالتی ِٛاخٗ ؽٛمي . دس چٕني ِٛاسدی دس فٛستی وٗ يه ٔغخٗ
cacheؽذٖ اص ففسٗ دس دعرتط ثبؽذ ، وذ ِشتجظ ثب آْ دس
صِبْ اؽىبي صدائی اخشاء زمٛا٘ذ ؽذ .
Cachingمست طزٔيض گريَذِ
يىی ديگش اص گضيٕٗ ٘ب ، cacheففسٗ دس مست عشٚيظ گرئذٖ
اعت . دس ايٓ سٚػ ، ِشٚسگش ٔغخٗ ای اص ففسٗ سا رخريٖ ٚ
ثغٛس اتِٛبتيه اص آْ دس ِٛاسدی وٗ دوّٗ ِ backشٚسگش وٍيه
ٚ يب آدسط URLففسٗ جمذدا" تبيپ ؽٛد، اعتفبدٖ ِی سمبيذ .
دس فٛستی وٗ وبسثش دوّٗ Refreshسا فؼبي سمبيذ ، اص ٔغخٗ
ٚ ففسٗ جمذدا" اص عشٚيظ دٕ٘ذٖ دسخٛاعت cacheؽذٖ فشفٕظش
ِی گشدد .
ثشای cacheيه ففسٗ دس مست عشٚيظ گرئذٖ اص خقٍت Locationدس
اعتفبدٖ ِی گشدد . ِمذاس پيؼ فشك دايشوتيٛ OutputCache
ايٓ خقٍت serverاعت ٚ ِی تٛأذ ِمبديش ديگش ٔظري ، Client
Any ٚ Noneسا ثٗ آْ ٔغجت داد .
@%% "VaryByParam="None" Location="Client
اعتفبدٖ اص cachingمست عشٚيظ گرئذٖ دبشاتت وّرت اص caching
مست عشٚيظ دٕ٘ذٖ اعت چشاوٗ ففسٗ شمچٕبْ ثشای ٘ش وبسثش خبؿ
جمذدا" اصمبد خٛا٘ذ ؽذ . دس سٚػ فٛق ، ؽب٘ذ وب٘ؼ ِذت صِبْ
اخشاء وذ ٚ يب دعتيبثی ثٗ ثبٔه اعالػبتی دس خٙت ذبجٛد
وبسآئی ثشٔبِٗ زمٛا٘يُ ثٛد . اص سٚػ cachingمست عشٚيظ
گرئذٖ دس ِٛاسد خبفی ٔظري صِبٔی وٗ ففسٗ cacheؽذٖ زبٚی
دادٖ عفبسؽی ٚ خمتـ ثٗ يه وبسثش اعت ، اعتفبدٖ ِی گشدد .
دس فٛستی وٗ ٘ش وبسثش دس يه sessionجمضاء فؼبٌيت ِی سمبيذ
، ففسٗ يه ِشتجٗ اصمبد ٚ شببِی عشٚيظ گرئذگبْ اص آْ
اعتفبدٖ خٛإ٘ذ وشد . دس چٕني ٚضؼيتی دمىٓ اعت ػٍّىشد يه
خٛػ پيبَ يه سمبيؼ ٔظري ( گشدد ِٛاخٗ ِؾىً ثب ففسٗ
آِذگٛئی ثٗ وبسثش ٚ ثش اعبط ٔبَ آْ ) . دس ِمبثً ، ِی
تٛاْ اص fragment cachingثشای cachingخبؼ ٘بئی خبؿ اص ففسٗ
ٚ يب cachingمست عشٚيظ گرئذٖ ثٗ ِٕظٛس رخريٖ ٔغخٗ خمتـ يه
وبسثش ثش سٚی وبِپيٛتش ٘ش يه اص عشٚيظ گرئذگبْ اعتفبدٖ
سمٛد.
output دسخبؼ پٕدُ ثٗ ثشسعی عبيش سٚػ ٘بی ِٛخٛد ثشای
cachingخٛا٘يُ پشداخت .
افشايغ كارآئی بزَايّ ْای ٔب در 0.2 ( ASP.NETخبغ پُجى)
آٔچٗ تبوْٕٛ گفتٗ ؽذٖ اعت :
خبؼ ٘بی اٚي ٚ دَٚ : اؽبسٖ ثٗ جمّٛػٗ ای اص ٔىبت وٗ
سػبيت آهنب دس صِبْ عشازی ِی تٛأذ صِيٕٗ پيبدٖ عبصی
يه ثشٔبِٗ ٚة وبسآ سا فشاُ٘ سمبيذ .
33
Farsiplanet.com
: ِؼشفی ثشخی اثضاس٘ب ثشای تغت ثشٔبِٗ ٘بی خبؼ عَٛ
ٚة
خبؼ چٙبسَ : ِفب٘يُ اٌٚيٗ ، cachingسٚػ ٘بی cachingدس
، ASP.NETرمٖٛ اعتفبدٖ اص output caching
output cachingاداِٗ دس ايٓ خبؼ حبث خٛد سا دس استجبط ثب
دادٖ ٚ ثش سٚی ِ Query string ٚ Cachingتّشوض خٛا٘يُ ؽذ.
Query string ٔ Caching
يىی اص ٔىبت ُِٙ دس خقٛؿ ، cachingتقّيُ دس خقٛؿ صِبْ
اعتفبدٖ جمذد اص ففسٗ ٚ فست اعالػبت اعت . اغٍت پيبدٖ
وٕٕذگبْ شببيً صيبدی دس اسائٗ اعالػبت ثٗ فٛست ثالدسٔگ
داسٔذ ٚ وّرت دس أذيؾٗ اعتفبدٖ ذبيٕٗ اص عيغتُ ِ cachingی
ثبؽٕذ . پيبدٖ وٕٕذگبْ ِی تٛإٔذ ثذْٚ ٔگشأی دس ِٛاسد
ِتؼذدی اص cachingاعتفبدٖ سمبيٕذ تب وبسآئی ثشٔبِٗ ٘بی
. دٕ٘ذ افضايؼ سا ٚة
دس ِٛاسدی وٗ اعالػبت ثٗ فٛست پٛيب تٌٛيذ ِی گشدد ٚضؼيت
ٚ cachingيب اعرتاتژی اصمبد ٚ ثىبسگريی جمذد آْ تب أذاصٖ ای
ِتفبٚت خٛا٘ذ ثٛد . ثٗ ػٕٛاْ سمٛٔٗ ، دس فٛستی وٗ دس
ففسٗ ای اص sessionوبسثش خبسی اعتفبدٖ ِی ؽٛد تب ثش اعبط
آْ ساثظ وبسثش عبصِبٔذ٘ی گشدد ، cachingشببَ ففسٗ ِٕبعت
زمٛا٘ذ ثٛد چشاوٗ يه ففسٗ ِؾبثٗ سمی تٛأذ ثشای عبيش
وبسثشاْ ِفيذ ٚ لبثً اعتفبدٖ جمذد ثبؽذ . يه سمٛٔٗ ديگش ،
ففسٗ ای اعت وٗ اعالػبت دسيبفتی خٛد سا اص يه ففسٗ ديگش
ٚ اص عشيك query stringدسيبفت ِی سمبيذ . دس چٕني ِٛاسدی
cachingآْ ِی ثبيغت اص ففسٗ ثٗ فٛست پٛيب اصمبد ٚ ثشای
گشدد. اعتفبدٖ ديگش سا٘ىبس٘بئی
43
Farsiplanet.com
ثٗ خقٍت VaryByParam دس ِثبي اؽبسٖ ؽذٖ دس خبؼ چٙبسَ
دايشوتيٛ ِ ، OutputCacheمذاس ٔ Noneغجت دادٖ ؽذٖ ثٛد .
ثذيٓ تشتيت ثٗ ASP. NETاػالَ ؽذٖ اعت وٗ فشفب" يه ٔغخٗ
cacheسمبيذ تب ثتٛاْ اص آْ دس شببِی زبالت اص ففسٗ سا
اعتفبدٖ جمذد سمٛد . دس چٕني ِٛاسدی اگش دسخٛاعت ففسٗ ثٗ
شمشاٖ اضبفٗ وشدْ آسگِٛبْ ٘بی query stringثٗ URLثبؽذ ،
فشفب" اص شمبْ يه ٔغخٗ cacheؽذٖ ثذْٚ تٛخٗ ثٗ ِمذاس
آسگِٛبْ ٘بی دسيبفتی اعتفبدٖ ِی گشدد ( تب صِبٔی وٗ
مشب تبسيخ ِقشف ٔغخٗ cacheؽذٖ ثٗ اشببَ ٔشعيذٖ ثبؽذ ) .
query ِی تٛأيذ ايٓ ِٛضٛع سا ثب اضبفٗ وشدْ يه آسگِٛبْ
stringثغٛس دعتی دس ِشٚسگش اذمبَ د٘يذ . ِثال" عؼی وٕيذ
دس أتٙبی URLاخشاء سمبئيذ. ? a=b سا ثب افضٚدْ ففسٗ
ِؾب٘ذٖ خٛا٘يذ وشد وٗ خشٚخی cacheؽذٖ شمچٕبْ يىغبْ خٛا٘ذ
. ثٛد
ثب تٛخٗ ثٗ ٔتبيح فٛق دمىٓ اعت ايٕگٛٔٗ ثشداؽت ؽٛد وٗ
output cachingثشای ففسٗ ای وٗ اص آسگِٛبْ ٘بی string query
اعتفبدٖ ِی سمبيذ ، ِٕبعت ٔجبؽذ . دس ايٓ ساثغٗ ASP.NET
يه ساٖ زً ديگش سا اسائٗ سمٛدٖ اعت . دس چٕني ِٛاسدی ِی
تٛاْ خقٍت VaryByParamسا "*" دس ٔظش گشفت تب ِؾخـ گشدد
وٗ ففسٗ اص query stringاعتفبدٖ ِی سمبيذ ٚ ثٗ ASP.NETاػالَ
خمتٍف ِمبديش ثشای سا جمضاء cache ٘بی ٔغخٗ وٗ گشدد
آسگِٛبْ query stringرخريٖ سمبيذ .
"02"=% "*"=VaryByParam
ثذيٓ تشتيت صِبٔی وٗ ففسٗ ثٗ شمشاٖ اعالػبت query string
دسخٛاعت ؽٛد ، دس اثتذا ِ ASP.NETمذاس query stringسا
53
Farsiplanet.com
ثشسعی ِی سمبيذ . دس فٛستی وٗ سؽتٗ دسيبفتی ثب دسخٛاعت
لجٍی ِغبثمت سمبيذ ٚ يه ٔغخٗ cacheؽذٖ اص ففسٗ ِٛخٛد
ثبؽذ ، اص آْ اعتفبدٖ خٛا٘ذ وشد . دس غري ايٕقٛست يه
ٔغخٗ خذيذ اص ففسٗ اصمبد ٚ ثغٛس خذاگبٔٗ ِ cacheی گشدد .
ثشای آؽٕبئی ذبرت ثب رمٖٛ ػٍّىشد فشآيٕذ فٛق ، فشك وٕيذ
جمّٛػٗ ای اص دسخٛاعت ٘ب ثٗ تشتيت صيش دسيبفت گشدد:
وبسثشی ففسٗ ای سا ثذْٚ پبساِرت query stringدسخٛاعت ٚ
ٔغخٗ Aففسٗ سا دسيبفت ِی سمبيذ .
ٚ دسخٛاعت 1=ProductID پبساِرت ثب سا ففسٗ وبسثشی
ٔغخٗ Bففسٗ سا دسيبفت ِی سمبيذ .
وبسثش ديگش ففسٗ سا ثب پبساِرت 2= ProductIDدسخٛاعت ٚ
ٔغخٗ Cففسٗ سا دسيبفت ِی سمبيذ .
وبسثش ديگش ففسٗ سا ثب پبساِرت 1= ProductIDدسخٛاعت
ِی سمبيذ . دس فٛستی وٗ تبسيخ اػتجبس ٔغخٗ Bوٗ لجال"
cacheؽذٖ اعت ثٗ اشببَ ٔشعيذٖ ثبؽذ ، ايٓ ٔغخٗ ثشای
ٚی اسعبي ِی گشدد.
وبسثش ديگش ففسٗ سا ثذْٚ پبساِرت دسخٛاعت ِی سمبيذ .
دس فٛستی وٗ تبسيخ اػتجبس ٔغخٗ Aوٗ لجال" cacheؽذٖ
اعت ثٗ اشببَ ٔشعيذٖ ثبؽذ ، ايٓ ٔغخٗ ثشای ٚی اسعبي
ِی گشدد.
ثشای تغت فٛق ٚ دسيبفت ٔتبيح ذبرت ِی تٛاْ ِذت صِبْ
. وشد صيبد سا ؽذٖ cache ٔغخٗ اػتجبس
دس فٛستی وٗ ففسٗ ای فشفب" دس استجبط ثب دادٖ مست عشٚيظ
دٕ٘ذٖ ( ٔظري دادٖ ِٛخٛد دس يه ثبٔه اعالػبتی ) ٚ يب دادٖ
ِٛخٛد دس query stringثبؽذ ، ثذْٚ ٔگشأی ِی تٛاْ اص سٚػ
output cachingاعتفبدٖ وشد .
63
Farsiplanet.com
دس فٛستی وٗ خشٚخی ففسٗ ٚاثغتٗ ثٗ اعالػبت خبؿ ٚ ِشتجظ
ثب وبسثش ٔظري دادٖ ٚ sessionيب وٛوی ثبؽذ ، اص سٚػ output
cachingسمی تٛاْ اعتفبدٖ سمٛد چشاوٗ ِىبٔيضِی ٚخٛد ٔذاسد
وٗ ثش اعبط آْ ثتٛاْ تفبٚت cachingسا ثش اعبط ٚ session
يب وٛوی تؾخيـ داد. output cachingشمچٕني ثب ففسبت پٛيبئی
وٗ حمتٛيبت خٛد سا دس پبعخ ثٗ سٚيذاد٘بی ِشتجظ ثب وٕرتي
٘ب تغيري ِی دٕ٘ذ وبس سمی وٕذ . دس چٕني ِٛاسدی ، ِی تٛاْ
اص fragment cachingثشای cachingيه خبؼ خبؿ اص ففسٗ ٚ يب اص
data cachingثشای cachingاعالػبت خبؿ اعتفبدٖ وشد.
cachingبا پارايرتْائی خاؽ
ثٕذست ِمذاس ِ VaryByParamؼبدي "*" دس ٔظش گشفتٗ ِی ؽٛد
ٚ دس اوثش ِٛاسد ذبرت اعت وٗ يه ِتغري ُِٙ query stringسا ثب
ٔبَ ِؾخـ وشد . وذ صيش رمٖٛ اذمبَ ايٓ وبس سا ٔؾبْ ِی
د٘ذ.
"02"=% "VaryByParam="ProductID
دس چٕني ِٛاسدی ، ِ ASP.NETمذاس query stringسا ثشسعی ٚ ثٗ
ثب ٘بئی دسخٛاعت . گشدد ِی ProductID پبساِرت دٔجبي
ٚ اص عبيش پبساِرت٘بی خمتٍف ProductIDثغٛس خذاگبٔٗ cache
پبساِرت٘ب فشفٕظش خٛا٘ذ ؽذ .
دس فٛست ٌضَٚ ِی تٛاْ چٕذيٓ پبساِرت سا وٗ تٛعظ semicolon
73
Farsiplanet.com
اص يىذيگش خذا ؽذٖ أذ ثٗ خقٍت ٔ VaryByParamغجت داد .
وذ صيش رمٖٛ اذمبَ ايٓ وبس سا ٔؾبْ ِی د٘ذ .
"02"=% "VaryByParam="ProductID;CurrencyType
دس چٕني ِٛاسدی ، ٔ ASP.NETغخٗ ٘بئی خذاگبٔٗ اص ففسٗ سا
ثب تٛخٗ ثٗ ِمبديش ِتفبٚت اسائٗ ؽذٖ تٛعظ ٚ ProductID
CurrencyTypeدس ٔ cacheگٙذاسی خٛا٘ذ وشد .
يثال : Cachingچُذيٍ َظخّ جذاگاَّ اس يك صفحّ
دس ايٓ ِثبي اص دٚ ففسٗ ثشای ٔؾبْ دادْ رمٖٛ cachingچٕذيٓ
ٔغخٗ خذاگبٔٗ اص يه ففسٗ ٚة اعتفبدٖ ؽذٖ اعت . اٌٚني
ففسٗ ثب ٔبَ QueryStringSender.aspxوٗ خٛد cacheسمی گشدد ٚ
دس آْ عٗ دوّٗ ِغبثك ؽىً 0 اسائٗ ِی گشدد :
ؽىً 0 : اصمبد عٗ دوّٗ ثشای تغت cachingچٕذيٓ ٔغخٗ خذاگبٔٗ اص يه
ففسٗ ثش اعبط ِمذاس پبساِرت Version
ففسٗ QueryStringSender.aspx
"%
83
Farsiplanet.com
Protected Sub AnyButton_Click(ByVal sender As Object,ByVal
e As System.EventArgs )
Response.Redirect("QueryStringRecipient.aspx"
&"?Version=" & CType(sender, Control).ID)
End Sub
Caching Test
ٖٔغخٗ مشبس
ٖٔغخٗ مشبس
ٖٔغخٗ مشبس
39
Farsiplanet.com
) پظ اص وٍيه ثشAnyButton_Click َ ( ثب ٔبevent handler يه
سٚی ٘ش يه اص عٗ دوّٗ ِٛخٛد دس ففسٗ فؼبي ِی گشدد . دس
، cmd2 ( ّٗسٚتني فٛق پظ اص تؾخيـ ايٓ وٗ ثش سٚی وذاَ دو
ٗوٍيه ؽذٖ اعت ، ِمذاس آْ اعتخشاج ٚ ث ) cmd3 ٚ cmd1
ٗ ٔغجت دادٖ ِی ؽٛد ٚ دس هنبيت وبسثش ثVersion پبساِرت
. گشدد ِی ٘ذايت QueryStringRecipient.aspx ٗففس
) يه پيبَ سا ِتٕبعتQueryStringRecipient.aspx ( ففسٗ ِمقذ
ٗ دس خشٚخی سمبيؼ ِی د٘ذ . دس ففسVersion ثب ِمذاس پبساِرت
ِؼبديOutputCache ٛدايشوتي VaryByParam فٛق ِمذاس خقٍت
.اعت ٖؽذ ٗگشفت ٔظش دس Version
Version َ ثب ٔبstring query (ففسٗ فٛق ثٗ دٔجبي يه پبساِرت
. ) ِی گشددcache ٗٔخٙت اصمبد ٔغخٗ ٘بی خذاگب
ثب تٛخٗ ثٗ ِمذاس پبساِرت QueryStringRecipient.aspx ٗدس ففس
، تبسيخ ٚ صِبْ خبسی ثش اعبط يه فشِت خبؿ دسVersion
. ِی گشددcache خشٚخی سمبيؼ ٚ يه ٔغخٗ اص آْ ٔيض
QueryStringRecipient.aspx ٗففس
Sub page_load ( )
:" & صِبْ ٚ تبسيخ خبسیlblDate.Text = "
40
Farsiplanet.com
DateTime.Now.ToString()
Select Case Request.QueryString("Version")
Case "cmd1"
lblDate.Font.Size = FontUnit.XLarge
Case "cmd2"
lblDate.Font.Size = FontUnit.Large
Case "cmd3"
lblDate.Font.Size = FontUnit.Small
End Select
End Sub
Cache test
اصمبد ٚ ثب تٛخٗ ثٗ ِذتHtml ٗٔثذيٓ تشتيت عٗ خشٚخی خذاگب
OutputCache ٛ دايشوتيDuration صِبْ ِؾخـ ؽذٖ تٛعظ خقٍت
. گشدٔذ ِی cache آتی ٖاعتفبد خٙت
"دس ِثبي فٛق ثشای تؾخيـ تفبٚت ثني عٗ ٔغخٗ ِتفبٚت فشفب
41
Farsiplanet.com
أذاصٖ فٛٔت تغيري دادٖ ؽذٖ اعت . خشٚخی ثشٔبِٗ فٛق دس
ؽىً 2 ٔؾبْ دادٖ ؽذٖ اعت .
ؽىً 2 : اصمبد عٗ ٔغخٗ cacheخذاگبٔٗ ثب تٛخٗ ثٗ ِمذاس پبساِرت Version
output دس خبؼ ؽؾُ ثٗ ثشسعی عبيش سٚػ ٘بی ِٛخٛد ثشای
cachingخٛا٘يُ پشداخت .
افشايغ كارآئی بزَايّ ْای ٔب در 0.2 ( ASP.NETخبغ ػؼى)
آٔچٗ تبوْٕٛ گفتٗ ؽذٖ اعت :
خبؼ ٘بی اٚي ٚ دَٚ : اؽبسٖ ثٗ جمّٛػٗ ای اص ٔىبت وٗ
سػبيت آهنب دس صِبْ عشازی ِی تٛأذ صِيٕٗ پيبدٖ عبصی
يه ثشٔبِٗ ٚة وبسآ سا فشاُ٘ سمبيذ .
: ِؼشفی ثشخی اثضاس٘ب ثشای تغت ثشٔبِٗ ٘بی خبؼ عَٛ
ٚة
خبؼ چٙبسَ : ِفب٘يُ اٌٚيٗ ، cachingسٚػ ٘بی cachingدس
، ASP.NETرمٖٛ اعتفبدٖ اص output caching
خبؼ پٕدُ : Query string ٚ Caching
output cachingاداِٗ دس ايٓ خبؼ حبث خٛد سا دس استجبط ثب
دادٖ ٚ ثش سٚی ِ Custom Caching Controlتّشوض خٛا٘يُ ؽذ.
24
Farsiplanet.com
Custom Caching Control
ثشای رخريٖ چٕذيٓ ٔغخٗ cacheاص يه ففسٗ تٕٙب گضيٕٗ ِٛخٛد
اعتفبدٖ اص پبساِرت٘بی query stringسمی ثبؽذ . ASP.NETثٗ
٘بئی سٚيٗ اصمبد اِىبْ ٚة ٘بی ثشٔبِٗ وٕٕذگبْ پيبدٖ
عفبسؽی سا ِی د٘ذ وٗ ثٗ وّه آهنب ِی تٛاْ دس خقٛؿ caching
يه ٔغخٗ خذيذ اص يه ففسٗ ٚ يب اعتفبدٖ اص ٔغخٗ ِٛخٛد
. وشد گريی تقّيُ
وذ ٔٛؽتٗ ؽذٖ دس ٘ش يه اص سٚيٗ ٘بی فٛق ِٕبعت ثٛدْ
اعالػبت سا ثشسعی ٚ يه سؽتٗ سا ثشِی گشدأذ . دس اداِٗ ،
ASP.NETاص سؽتٗ فٛق ثشای پيبدٖ عبصی cachingاعتفبدٖ ِی
سمبيذ. دس فٛستی وٗ وذ ِٛسد ٔظش سؽتٗ ِؾبذبی سا ثشای
اص ٔغخٗ cache دسخٛاعت ٘بی خمتٍف تٌٛيذ سمبيذ ، ASP.NET
ؽذٖ ففسٗ اعتفبدٖ خٛا٘ذ وشد ٚ دس فٛستی وٗ وذ فٛق يه
ِمذاس خذيذ سا تٌٛيذ سمبيذ ، ASP.NETيه ٔغخٗ خذيذ cache
سا اصمبد ٚ آْ سا ثغٛس خذاگبٔٗ رخريٖ ِی سمبيذ .
ثٗ ػٕٛاْ سمٛٔٗ فشك وٕيذ لقذ داسمي ٔغخٗ ٘بی خمتٍفی اص يه
ففسٗ سا ثش اعبط ٔٛع ِشٚسگش cacheسمبئيُ . ثذيٓ ِٕظٛس دس
اثتذا اص دايشوتيٛ OutputCacheدس اثتذای ففسبتی وٗ لقذ
cachingآهنب سا داسمي اعتفبدٖ وشدٖ ٚ دس اداِٗ اص خقٍت
VaryByCustomثشای ِؾخـ وشدْ يه ٔبَ وٗ ٔٛع cachingعفبسؽی
. سمبئيُ ِی اعتفبدٖ ، سمبيذ ِی ِؾخـ سا
ثب تٛخٗ ثٗ ايٓ وٗ لقذ داسمي ففسبت ثش اعبط ِشٚسگش
Browser وبسثشاْ cacheسمبئيُ ، دس سمٛٔٗ وذ صيش اص ٔبَ
اعتفبدٖ ؽذٖ اعت .
@%
ساcaching دس اداِٗ ٔيبص داسمي سٚيٗ ای سا وٗ سؽتٗ عفبسؽی
تٌٛيذ ِی سمبيذ ، اصمبد سمبئيُ . سٚيٗ فٛق ِی ثبيغت دس
ٗ ِشثٛعcode-behind ً ٚ يب فبيglobal.asax فبيً پيىشثٕذی
. ثبؽذ
. وذ صيش رمٖٛ اذمبَ ايٓ وبس سا ٔؾبْ ِی د٘ذ
ٗٔغخ ٓچٕذي عفبسؽی اصمبد ثشای ای ٗسٚي
ٗ اص يه ففسcache
Function GetVaryByCustomString(ByVal context As HttpContext,
ByVal arg As String) As String
If arg = "Browser"
Dim BrowserName As String
BrowserName = Context.Request.Browser.Browser
Return BrowserName
Else
Return MyBase.GetVaryByCustomString(context, arg)
End If
End Function
VaryByCustom يه سؽتٗ ثب ِمذاسGetVaryByCustomString تبثغ
دسيبفت ِی سمبيذ . ثذيٓ تشتيت ِیarg سا اص عشيك پبساِرت
تٛاْ ثشٔبِٗ ای سا پيبدٖ عبصی سمٛد وٗ چٕذيٓ ٔٛع اص
عفبسؽی سا فشفب" دس يه تبثغ ِؾبثٗ پيبدٖ عبصیcaching
خمتٍف اعتفبدٖ ِیVaryByCustom َٔب سمبيذ . ٘ش ٔٛع اص يه
. ) DayOfWeek ٚ يبBrowserVersion ، Browser سمبيذ ( ٔظري
arg ْ سا اص عشيك آسگِٛبVaryByCustom تبثغ فٛق ِمذاس
44
Farsiplanet.com
ِؾب٘ذٖ ٚ سؽتٗ ِٕ cachingبعت سا ثشِی گشدأذ . دس فٛستی
وٗ سؽتٗ ٘بی cachingثشای دسخٛاعت ٘بی خمتٍف ِغبثمت سمبيذ ،
ASP.NETاص ٔغخٗ cacheؽذٖ ففسٗ اعتفبدٖ ِی سمبيذ. دس غري
ايٕقٛست ASP.NETثشای ٘ش سؽتٗ cachingيه ٔغخٗ خذاگبٔٗ سا
. سمبيذ ِی cache ٚ رخريٖ ، اصمبد
دايشوتيٛ OutputCacheداسای يه خقٍت عَٛ اعت وٗ اص آْ
وٗ فٛق خقٍت . گشدد ِی اعتفبدٖ caching تؼشيف ثشای
ٔ VaryByHeaderبَ داسد ، ثٗ مشب اخبصٖ ِی د٘ذ وٗ ٔغخٗ ٘بئی
HTTP خذاگبٔٗ اص يه ففسٗ سا ثش اعبط ِمذاس دسيبفتی يه
رخريٖ سمبئيذ . دس ايٓ ساثغٗ ِی تٛاْ فشفب" يه header
ٚ headerيب جمّٛػٗ ای headerوٗ تٛعظ semicolonاص يىذيگش
خذا ؽذٖ أذ سا ِؾخـ سمٛد . عبيت ٘بی چٕذ صثبٔی ِی
تٛإٔذ اص سٚػ فٛق ثشای cachingچٕذيٓ ٔغخٗ اص يه ففسٗ ثش
. سمبيٕذ اعتفبدٖ گرئذٖ عشٚيظ ِشٚسگش صثبْ اعبط
وذ صيش رمٖٛ اعتفبدٖ اص خقٍت VaryByHeaderسا ٔؾبْ ِی د٘ذ
.
"% "VaryByHeader="Accept-Language
Fragment Caching
دس ثشخی ِٛاسد دمىٓ اعت ٔتٛاْ شببِی يه ففسٗ سا cacheسمٛد
ٌٚی شمچٕبْ افشاس داسمي وٗ خبؾی اص ففسٗ سا وٗ ثٕذست تغيري
ِی يبثذ ( ٔظري ٌيغت وبال٘بی ِٛخٛد ) ٚ ٘ضيٕٗ صيبدی فشف
اصمبد آْ ؽذٖ اعت سا cacheسمبئيُ . دس چٕني ِٛاسدی ِی تٛاْ
اص سٚػ ٘بی ِتؼذدی ٔظري ( data cachingدس خبؼ ثؼذ ايٓ ِمبٌٗ
ثب سٚػ اعتفبدٖ اص آهنب آؽٕب خٛا٘يُ ؽذ ) ٚ fragment
Cachingاعتفبدٖ وشد .
54
Farsiplanet.com
ثشای پيبدٖ عبصی ِ fragment Cachingی ثبيغت ثشای خبؾی اص
ففسٗ وٗ لقذ cachingآْ سا داسمي يه وٕرتي وبسثش سا اصمبد ٚ
دايشوتيٛ OutputCacheسا ثٗ آْ اضبفٗ وشد . ثذيٓ تشتيت
زمٛا٘ذ ؽذ ٌٚی وٕرتي وبسثش ػٍی سغُ ايٓ وٗ ففسٗ cache
. گشدد ِی cache
fragment Cachingاص حلبػ ِفِٙٛی ِؾبثٗ cachingيه ففسٗ اعت
ٚ فشفب" داسای يه تفبٚت اعبعی اعت . دس فٛستی وٗ ففسٗ
يه ٔغخٗ cacheؽذٖ اص يه وٕرتي وبسثش سا ثبصيبثی سمبيذ ،
سمی تٛأذ ثب آْ ٚ اص عشيك وذ استجبط ثشلشاس سمبيذ . ثٗ
ػٕٛاْ سمٛٔٗ دس فٛستی وٗ وٕرتي وبسثش خقٍت ٘بئی خبؿ سا
اسائٗ ِی سمبيذ ، ففسٗ ٚة ِٛسد ٔظش سمی تٛأذ ثٗ ايٓ خقٍت
٘ب دعتيبثی ٚ آهنب سا تغيري د٘ذ . تٛخٗ داؽتٗ ثبؽيذ ،
صِبٔی وٗ اص يه ٔغخٗ cacheؽذٖ وٕرتي وبسثش اعتفبدٖ ِی
گشدد ، يه ثالن اص تگ ٘بی Htmlدسْٚ ففسٗ لشاس خٛإ٘ذ
گشفت ٚ دس ػًّ ؽی وٕرتي وبسثش دس دعرتط زمٛا٘ذ ثٛد .
Cache Profiles
يىی اص ِغبئً دس استجبط ثب output cachingلشاس دادْ وذ
ٚ . aspx markupيب دس خبؼ وذ والط دسْٚ ففسٗ اعت ( دس خبؼ
) . ثب ايٓ وٗ اعتفبدٖ ٚ پيىشثٕذی خقٍت ٘بی ِشتجظ ثب
دايشوتيٛ OutputCacheدس ففسبت ٚة عبدٖ تش ثٕظش ِی آيذ
ٌٚی ايٓ سٚػ ِی تٛأذ ِغبئً ِذيشيتی ٚ پؾتيجبٔی خمتـ ثٗ
خٛد سا ٔيض ثٗ دٔجبي داؽتٗ ثبؽذ (خقٛفب" اگش دٖ ٘ب ففسٗ
cacheؽذٖ اصمبد ؽذٖ ثبؽذ ) . ثٗ ػٕٛاْ سمٛٔٗ دس فٛستی وٗ
لقذ داؽتٗ ثبؽيُ تغيرياتی سا دس خقٛؿ cachingشببِی ففسبت
فٛق اذمبَ د٘يُ ( ِثال" تغيري ِذت صِبْ cachingاص 10 ثبٔيٗ
64
Farsiplanet.com
ثٗ 16 ثبٔيٗ ) ، ِی ثبيغت ٘ش ففسٗ ثغٛس خذاگبٔٗ تغيري ٚ
دس اداِٗ ٔيض تٛعظ ASP.NETجمذدا" تشمجٗ گشدٔذ .
دس 0.2 ASP.NETثب ِؼشفی يه سا٘ىبس خذيذ ايٓ اِىبْ دس
اختيبس پيبدٖ وٕٕذگبْ گزاؽتٗ ؽذٖ اعت تب ثتٛإٔذ اص
تٕظيّبت ِ cachingؾبثٗ ثشای گشٚ٘ی اص ففسبت اعتفبدٖ سمبيٕذ
. ثٗ ٚيژگی فٛق ِ cache profileی گٛيٕذ ٚ ثٗ وّه آْ ِی تٛاْ
تٕظيّبت cachingسا دس يه فبيً web.configتؼشيف سمٛد . ثذيٓ
تشتيت ، اػّبي تغيريات فشفب" اص عشيك يه ٔمغٗ فشاُ٘ ِی
. گشدد
خبؼ دس add تگ اص ، Cache Profile يه تؼشيف ثشای
outputCacheProfilesفبيً web.configاعتفبدٖ ِی گشدد . ثٗ
cache profileاصمبد ؽذٖ يه ٔبَ ٚ ِذت صِبْ ِٕبعت ٔغجت دادٖ
ِی ؽٛد . وذ صيش رمٖٛ اذمبَ ايٓ وبس سا ٔؾبْ ِی د٘ذ .
تؼشيف يه cache profileدس فبيً web.config
>/
>
CacheProfile دس اداِٗ ِی تٛاْ اص پشٚفبيً فٛق ثٗ وّه خقٍت
. دس يه ففسٗ اعتفبدٖ سمٛد
VaryByParam ٔظريcaching دس فٛستی وٗ خبٛا٘يُ عبيش خضئيبت
سا ٔيض ِؾخـ سمبئيُ ِی تٛاْ آْ سا ثٗ ػٕٛاْ يه خقٍت دس
> دس پشٚفبيً ِؾخـ سمٛدadd _
Public Function MyMethod(ByVal myParameter As
Integer) As String
...
End Function
48
Farsiplanet.com
ثب تٛخٗ ثٗ اشببَ حبث ٚ Output cachingسٚػ ٘بی خمتٍف ثىبسگريی
آْ دس ثشٔبِٗ ٘بی ٚة ، دس خبؼ ٘فتُ ثٗ ثشسعی caching data
خٛا٘يُ پشداخت .
فشايغ كارآئی بزَايّ ْای ٔب در 0.2 ( ASP.NETخبغ ْفتى)
آٔچٗ تبوْٕٛ گفتٗ ؽذٖ اعت :
خبؼ ٘بی اٚي ٚ دَٚ : اؽبسٖ ثٗ جمّٛػٗ ای اص ٔىبت وٗ
سػبيت آهنب دس صِبْ عشازی ِی تٛأذ صِيٕٗ پيبدٖ عبصی
يه ثشٔبِٗ ٚة وبسآ سا فشاُ٘ سمبيذ .
: ِؼشفی ثشخی اثضاس٘ب ثشای تغت ثشٔبِٗ ٘بی خبؼ عَٛ
ٚة
خبؼ چٙبسَ : ِفب٘يُ اٌٚيٗ ، cachingسٚػ ٘بی cachingدس
، ASP.NETرمٖٛ اعتفبدٖ اص output caching
خبؼ پٕدُ : Query string ٚ Caching
خبؼ ؽؾُ : Custom Caching Control
دس ايٓ خبؼ ثٗ ثشسعی caching dataخٛا٘يُ پشداخت .
دادِ caching
وٗ اعت caching ٔٛع پزيشتشيٓ أؼغبف ، دادٖ caching
اعتفبدٖ اص آْ ِغتٍضَ اذمبَ ِشازٍی خبؿ دس ثشٔبِٗ اعت .
پيبدٖ وٕٕذگبْ ثشٔبِٗ ٘بی ٚة ِی تٛإٔذ ثب اعتفبدٖ اص
وٗ ٘ضيٕٗ اصمبد آهنب گشاْ اعت پتبٔغيً فٛق آيتُ ٘بئی سا
. سمبيٕذ اضبفٗ cache ؽی ثٗ
والط اص ای سمٛٔٗ ٚ اعت ففسٗ والط اص خقٍت يه cache
System.Web.Caching.Cacheسا ثش ِی گشدأذ . ػٍّىشد ؽی فٛق
94
Farsiplanet.com
ؽجب٘ت صيبدی ثب ؽی Applicationداسد ( ٔظري دعتيبثی ثٗ آْ
دس شببِی ففسبت تٛعظ عشٚيظ گرئذگبْ خمتٍف ) . ػٍی سغُ
ٚخٛد ؽجب٘ت ٘بی صيبد ، دٚ ؽی Cache ٚ Applicationداسای
تفبٚت ٘بئی اعبعی ثب يىذيگش ِی ثبؽٕذ :
ػی Cacheاس َٕع thread-safeاطت . ايٓ ثذاْ ِؼٕی
اعت وٗ پيبدٖ وٕٕذگبْ الصَ ٔيغت ثب فشازت ػٍّيبت lock
ٚ unlockؽی cacheسا لجً اص اضبفٗ وشدْ ٚ يب ززف يه
آيتُ اص cacheاذمبَ دٕ٘ذ . ثٗ ػٕٛاْ سمٛٔٗ ، دس فٛست
اصمبد يه ؽی عفبسؽی دمىٓ اعت دس يه حلظٗ ثيؼ اص يه
عشٚيظ گرئذٖ لقذ اعتفبدٖ اص آْ سا داؽتٗ ثبؽٕذ . دس
چٕني ِٛاسدی ايٓ ازتّبي ٚخٛد خٛا٘ذ داؽت وٗ ؽشايظ
عشٚيظ اص يه ٘ش ثشای غريِؼترب دادٖ اص اعتفبدٖ
گرئذگبْ فشاُ٘ گشدد . ثشای غٍجٗ ثش حمذٚديت فٛق ِی
تٛاْ اص سٚػ ٘بی خمتٍفی اعتفبدٖ سمٛد . اصمبد يه ٔغخٗ
ديگش اص ؽی ثٗ ِٕظٛس اعتفبدٖ اص آْ دس يه ففسٗ ،
يىی اص عبدٖ تشيٓ سا٘ىبس٘بی ِٛخٛد دس ايٓ صِيٕٗ اعت
.
آيتى ْای يٕجٕد در ػی Cacheبطٕر اتٕياتيك اس آٌ
حذف يی گزدَذ . ASP.NETيه آيتُ سا پظ اص اشببَ ِذت
صِبْ اػتجبس آْ ، دس فٛست تغيري يىی اص اؽيبء ٚ يب
اص فبيً ٘بی ٚاثغتٗ ٚ يب وّجٛد زبفظٗ عشٚيظ دٕ٘ذٖ
cacheخبسج ِی سمبيذ . ايٓ ثذاْ ِؼٕی اعت وٗ پيبدٖ
وٕٕذگبْ ِی تٛإٔذ ثب خيبٌی آعٛدٖ اص cacheاعتفبدٖ
سمبيٕذ ثذْٚ ايٓ وٗ ٔگشاْ اص دعت دادْ ِٕجغ اسصمشٕذ
زبفظٗ ثبؽٕذ چشاوٗ ASP.NETدس فٛست ٔيبص آيتُ ٘ب سا
اص زبفظٗ خبسج خٛا٘ذ وشد . ثب تٛخٗ ثٗ ايٓ وٗ شمٛاسٖ
ايٓ ازتّبي ٚخٛد داسد وٗ آيتُ ٘بی رخريٖ ؽذٖ اص cache
05
Farsiplanet.com
خبسج ؽذٖ ثبؽٕذ ِی ثبيغت شمٛاسٖ لجً اص دعتيبثی ،
ِٛخٛد ثٛدْ آهنب دس cacheثشسعی گشدد .
( ْا ٔابظتگی اس cache در يٕجٕد ْای آيتى
پيبدٖ وٕٕذگبْ ِی ) dependenciesمحايت يی منايُذ .
، يه خذٚي تٛإٔذ يه ؽی cacheؽذٖ سا ثٗ يه فبيً
ثبٔه اعالػبتی ٚ يب يه ِٕجغ ديگش ِشتجظ سمبيٕذ . دس
فٛست ثشٚص تغيريات دس ِٕجغ ٚاثغتٗ ، ؽی cacheؽذٖ
دس هنبيت اص زبفظٗ ثغٛس اتِٛبتيه غريِؼترب ِی گشدد ٚ
ززف ِی ؽٛد .
اضافّ كزدٌ آيتى بّ cache
ثشای اضبفٗ وشدْ يه ؽی دسْٚ cacheاص سٚػ ٘بی خمتٍفی
اعتفبدٖ ِی گشدد . يىی اص سٚػ ٘بی ِٛخٛد ٔغجت د٘ی دادٖ
ِٛسد ٔظش ثٗ يه ٔبَ ٚ رخريٖ آْ دس ؽی cacheاعت ( ٔظري وبس
ثب اؽيبء . ) Application ٚ Sessionثب تٛخٗ ثٗ ايٓ وٗ دس
ايٓ سٚػ سمی تٛاْ ثشای ؽی cacheؽذٖ يه ِذت صِبْ خبؿ سا
ِؾخـ سمٛد ، اعتفبدٖ اص ايٓ سٚػ وّرت تٛفيٗ ؽذٖ اعت .
)"Cache("KeyName =
objectToCache
يىی ديگش اص سٚػ ٘بی دسج دادٖ دسْٚ ؽی ، cacheاعتفبدٖ
اص ِتذ Insertاعت . ِتذ فٛق داسای چٙبس ٔغخٗ خبؿ اعت .
دس خذٚي صيش ، گشاِش يىی اص ٔغخٗ ٘بی فٛق وٗ خضئيبت ثيؼ
تشی اص وبس سا ثب ثىبسگريی پٕچ پبساِرت ِؾخـ ِی سمبيذ،
ٔؾبْ دادٖ ؽذٖ اعت .
,Cache.Insert(key ,item ,dependencies
15
Farsiplanet.com
)absoluteExpiration, slidingExpiration
دس خذٚي صيش ػٍّىشد ٘ش يه اص پبساِرت٘بی ِتذ Insertتٛضير
دادٖ ؽذٖ اعت .
ػٍّىشد پبساِرت
ثشای ؽذٖ گشفتٗ ٔظش دس ٔبَ
ِی ِؾخـ سا ؽذٖ Cache آيتُ
اِىبْ ، تشتيت ثذيٓ سمبيذ. Key
دعتيبثی ثٗ آيتُ Cacheؽذٖ ثش
اعبط ٔبَ فشاُ٘ گشدد.
ؽی ٚالؼی وٗ لقذ cachingآْ سا
Item
داسمي ، ِؾخـ ِی سمبيذ .
يه ؽی CacheDependencyوٗ ثٗ مشب
اخبصٖ ِی د٘ذ يه ٚاثغتگی ثشای
سا cache دس ٔظش ِٛسد آيتُ
. سمبئيذ اصمبد
dependencies
يه تؼشيف لقذ وٗ فٛستی دس
آيتُ ٚاثغتٗ سا ٔذاسمي ، ِمذاس
nullدس ايٓ پبساِرت ِی ثبيغت
ٔظش گشفتٗ ؽٛد .
ٚ صِبْ وٗ DataTime ؽی يه
cache آيتُ وشدْ خبسج تبسيخ
absoluteExpiration
اص cacheسا ِؾخـ ِی سمبيذ ؽذٖ
.
يه ؽی TimeSpanوٗ ِذت صِبْ
slidingExpirationأتظبس ثني دسخٛاعت ٘بی ِتٛاٌی
دس فٛست ػذَ اعتفبدٖ اص دادٖ
25
Farsiplanet.com
cacheؽذٖ خٙت خشٚج اص cacheسا
. سمبيذ ِی ِؾخـ
ثٗ ػٕٛاْ ِثبي ، دس فٛستی وٗ
ٔظش دس دليمٗ 12 ِمذاس ايٓ
گشفتٗ ؽٛد ٚ دس ِذت صِبْ فٛق
دادٖ ثشای دسخٛاعتی ٘يچگٛٔٗ
فٛق دسيبفت ٔگشدد ، ASP.NETآْ
سا اص زبفظٗ خبسج خٛا٘ذ وشد .
خذٚي 0 : پبساِرت٘بی ِتذ Insert
ِؼّٛال" اص شببِی پبساِرت٘بی فٛق دس يه صِبْ اعتفبدٖ سمی
گشدد . ثٗ ػٕٛاْ ِثبي ، Cache dependenciesيه اثضاس خبؿ
اعت وٗ ثٗ وّه آْ ِی تٛاْ ٚاثغتگی يه آيتُ cacheؽذٖ ثٗ
عبيش ِٕبثغ تبثريگزاس سا ِؾخـ سمٛد .
دس فٛستی وٗ لقذ اعتفبدٖ اص يه absolute expirationسا داؽتٗ
ِؼبدي slidingExpiration پبساِرت ِمذاس ثبيغت ِی ، ثبؽيُ
TimeSpan.Zeroدس ٔظش گشفتٗ ؽٛد.
,"Cache.Insert("MyItem ,obj
)Nothing,DateTime.Now.AddMinutes(60), TimeSpan.Zero
دس فٛستی وٗ ِغّئٓ ثبؽيُ اعالػبت ِٛخٛد دس يه آيتُ cache
ؽذٖ دس يه ثبصٖ صِبٔی خبؿ ِؼترب ثبلی ِی ِبٔذ ( ٔظري يه
گضاسػ ٘ٛاؽٕبعی ) ، اعتفبدٖ اص expiration absoluteتٛفيٗ ِی
گشدد . دس فٛستی وٗ دادٖ رخريٖ ؽذٖ دس cacheشمٛاسٖ ِؼترب
اص Sliding اعتفبدٖ ، ) حمقٛي يه وبتٌٛٛگ ٔظري ( ثبؽذ
تٛفيٗ ِی گشدد . ثٗ ػٕٛاْ يه عيبعت ِغٍٛة دس expiration
35
Farsiplanet.com
، ِی تٛاْ ِمذاس پبساِرت Sliding expiration خقٛؿ ثىبسگريی
. ٔغجت دادDateTime.Max ٗ سا ثabsoluteExpiration
Cache.Insert("MyItem", obj, Nothing,DateTime.MaxValue,
TimeSpan.FromMinutes(10))
كاربزدی يثال يك
ٖ دادٖ عبدٖ پيبدٖ عبصی ؽذcaching ُدس ثشٔبِٗ صيش يه عيغت
ٚ وٗ تبسيخTestItem َثب ٔب ُاعت . دس ايٓ ِثبي يه آيت
ٗصِبْ خبسی سا دس خٛد ٔگٙذاسی ِی سمبيذ ثٗ ِذت 10 ثبٔي
ففسٗ ، دس فٛستی وٗ تبسيخpostback ِی گشدد . پظ اصcache
، ثٗ اشببَ ٔشعيذٖ ثبؽذcache اػتجبس آيتُ رخريٖ ؽذٖ دس
ثبصيبثی ٚ دس خشٚخی سمبيؼ دادٖ ِی ؽٛدcache ِمذاس آْ اص
، cache . پظ اص اشببَ تبسيخ اػتجبس آيتُ رخريٖ ؽذٖ دس
ُجمذدا" ٚ ثش اعبط دادٖ خذيذ ( تبسيخ خذيذ عيغتُ ) آيت
رخريٖ ِی گشددcache ِٛسد ٔظش اصمبد ٚ خٙت اعتفبدٖ آتی دس
.
cache رخريٖ ٚ ثبصيبثی دادٖ دس ؽی
Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Me.Load
If Me.IsPostBack Then
"ٖاسعبي جمذد ففسٗ ثشای عشٚيظ دٕ٘ذ lblInfo.Text &= "
Else
"ٗاصمبد ففس lblInfo.Text &= "
End If
If Cache("TestItem") Is Nothing Then
54
Farsiplanet.com
cache"اصمبد دادٖ خٙت رخريٖ دس lblInfo.Text &= "
Dim testItem As DateTime = DateTime.Now
"ٗثٗ ِذت 10 ثبٔي lblInfo.Text &= "
Cache.Insert("TestItem", testItem, Nothing,
DateTime.Now.AddSeconds(30), TimeSpan.Zero)
Else
cache..." ثبصيبثی دادٖ اصlblInfo.Text &= "
Dim testItem As DateTime = CType(Cache("TestItem"), DateTime)
: '" & testItem.ToString()ٖ ؽذcache ٖ دادlblInfo.Text &= "
lblInfo.Text &= "'"
End If
lblInfo.Text &= ""
End Sub
ٖ دادcaching تغت
اسعبي ففسٗ ثشای ٖعشٚيظ دٕ٘ذ
. ؽىً صيش خشٚخی ثشٔبِٗ فٛق سا ٔؾبْ ِی د٘ذ
55
Farsiplanet.com
ؽىً 0 : رخريٖ ٚ ثبصيبثی دادٖ دس ؽی cache
اداِٗ خٛا٘يُ caching دس خبؼ ٘ؾتُ حبث خٛد سا ثش سٚی data
داد .
افشايغ كارآئی بزَايّ ْای ٔب در 0.2 ( ASP.NETخبغ ْؼتى)
آٔچٗ تبوْٕٛ گفتٗ ؽذٖ اعت :
: اؽبسٖ ثٗ جمّٛػٗ ای اص ٔىبت وٗ ٚ دَٚ خبؼ ٘بی اٚي
سػبيت آهنب دس صِبْ عشازی ِی تٛأذ صِيٕٗ پيبدٖ عبصی
يه ثشٔبِٗ ٚة وبسآ سا فشاُ٘ سمبيذ .
: ِؼشفی ثشخی اثضاس٘ب ثشای تغت ثشٔبِٗ ٘بی خبؼ عَٛ
ٚة
خبؼ چٙبسَ : ِفب٘يُ اٌٚيٗ ، cachingسٚػ ٘بی cachingدس
، ASP.NETرمٖٛ اعتفبدٖ اص output caching
Query string ٚ Caching خبؼ پٕدُ :
خبؼ ؽؾُ : Custom Caching Control
65
Farsiplanet.com
خبؼ ٘فتُ : cachingدادٖ ٚ رمٖٛ اعتفبدٖ اص ؽی cache
cachingاداِٗ خٛا٘يُ حبث خٛد سا ثش سٚی data دس ايٓ خبؼ
داد .
دس خبؼ ٘فتُ ثشای آؽٕبئی ثب رمٖٛ ػٍّىشد ؽی cacheثٗ ثشسعی
يه سمٛٔٗ ِثبي وبسثشدی پشداختيُ وٗ دس آْ دادٖ ِٛسد ٔظش
ثشای ِذت صِبْ خبفی دس ِ cacheغتمش ِی گشديذ . دس اداِٗ
ٚ ثٗ ِٕظٛس پبعخ ثٗ دسخٛاعت عشٚيظ گرئذگبْ اص دادٖ رخريٖ
ؽذٖ دس ِ cacheؾشٚط ثٗ ػذَ اشببَ تبسيخ اػتجبس آْ اعتفبدٖ
ِی گشديذ . دس فٛست اشببَ تبسيخ ِقشف ٔغخٗ cacheؽذٖ ،
دادٖ خذيذ تٌٛيذ ٚ جمذدا" دس cacheلشاس ِی گشفت . دس ايٓ
. گشفت ِی لشاس cache دس عبدٖ دادٖ يه فشفب" ِثبي
ؽبيذ ثشای مشب ايٓ عٛاي ِغشذ ؽذٖ ثبؽذ وٗ آيب ِی تٛاْ
اعالػبت پيچيذٖ تشی ٔظري دادٖ ثبصيبثی ؽذٖ اص يه ثبٔه
اعالػبتی سا ٔيض ثذيٓ ؽىً دس cacheلشاس داد تب ثتٛاْ اص
آيب آْ ثشای پبعخ ثٗ عبيش عشٚيظ گرئذگبْ اعتفبدٖ سمٛد ؟
cache ِی تٛاْ يه عيغتُ فيٍرتيٕگ سا ثش اعبط دادٖ ٘بی
ؽذٖ پيبدٖ عبصی سمٛد ثگٛٔٗ ای وٗ ِتٕبعت ثب خٛاعتٗ وبسثش
خبؾی اص دادٖ cacheؽذٖ دس اختيبس ٚی لشاس دادٖ ؽٛد ؟
اخبصٖ د٘يذ ثب ثشسعی يه ِثبي وبسثشدی ثٗ عٛاالت فٛق پبعخ
د٘يُ .
يثال : اجياد cachingبا قابهيت يؼاْذِ چُذيٍ viewاس
دادِ
دس ايٓ ِثبي اعالػبت ِٛسد ٔظش اص يه ثبٔه اعالػبتی ( ثٗ
ثبصيبثی ٚ پظ اص رخريٖ دس يه ػٕٛاْ سمٛٔٗ ) Northwind
DataSetدس DataSetدس يه Gridviewسمبيؼ دادٖ ِی ؽٛد .
cacheرخريٖ ِی گشدد تب دس آيٕذٖ ٚ لجً اص اشببَ تبسيخ
75
Farsiplanet.com
اػتجبس آْ ثتٛاْ اص شببَ ٚ يب خبؾی اص اعالػبت آْ ِتٕبعت
. سمٛد ٖاعتفبد وبسثش ٗخٛاعت ثب
ٚ ثٗ فٛست پٛيب خشٚخی ففسٗ ٚة ثش اعبط خٛاعتٗ وبسثش
اصمبد ِی گشدد . دس ٚالغ ، وبسثش اعت وٗ ِؾخـ ِی وٕذ دس
خشٚخی . داسد سا اعالػبتی ٔٛع ٗچ ِٖؾب٘ذ لقذ خشٚخی
ثشٔبِٗ فٛق دس چٕذيٓ عتْٛ خمتٍف ِی تٛأذ سمبيؼ دادٖ ؽٛد
. وبسثش ثب أتخبة يه ٚ يب چٕذيٓ عتْٛ ٔظش خٛد سا خقٛؿ
. رمٖٛ سمبيؼ خشٚخی ِؾخـ ِی سمبيذ
: ّتٕضيحات بزَاي
اص عشيك يه تبثغ اختقبفی ٚ ثٗ فٛست صيش اصمبدDataSet
. ِی گشدد
ثٗ وّه يه تبثغ اختقبفیDataSet اصمبد
Function RetrieveData() As DataSet
Dim connectionString As String = _
WebConfigurationManager.ConnectionStrings("NORTHWNDConnectionString").Co
nnectionString
Dim SQLSelect As String = "SELECT * FROM Customers"
Dim con As New SqlConnection(connectionString)
Dim cmd As New SqlCommand(SQLSelect, con)
Dim adapter As New SqlDataAdapter(cmd)
Dim ds As New DataSet()
Try
con.Open()
adapter.Fill(ds, "Customers")
Finally
con.Close()
End Try
58
Farsiplanet.com
Return ds
End Function
ِی گشدد ، ٌيغتی اصload ٗدس اٌٚني ِشتجٗ ای وٗ ففس
chckColumns َ ثب ٔبCheckBoxList عتْٛ ٘ب تٛعظ يه وٕرتي
دس خشٚخی ٚ ثٗ ِٕظٛس دسيبفت ٔمغٗ ٔظشات وبسثش سمبيؼ
سٚتني دس صيش وذ اص ِٕظٛس ٓثذي . ؽٛد ِی ٖداد
. اعتفبدٖ ؽذٖ اعتpage_load
سمبيؼ ٌيغتی اص عتْٛ ٘ب تٛعظ يه وٕرتي
CheckBoxList
chkColumns.DataSource = ds.Tables(0).Columns
chkColumns.DataMember = "Item"
chkColumns.DataBind()
sliding ثٗ ِذت دٚ دليمٗ وٗ تٛعظ پبساِرتDataset
. لشاس ِی گريدcache ِؾخـ ؽذٖ اعت دس expiration
ٚ اص عشيكDataSet دس صِبْ اصمبدCache دسDataset ٖرخري
اذمبَ ِیcache ؽیInsert ٚ ثٗ وّه ِتذGetDataSet سٚتني
. ؽٛد
ٗ ثٗ ِذت 2 دليمcache دسDataSet ٖرخري
Cache.Insert("DataSet", ds, Nothing,
DateTime.MaxValue,TimeSpan.FromMinutes(2))
، " پظ اص وٍيه ثش سٚی دوّٗ " فيٍرت ٚ سمبيؼ اعالػبت
cache اص عشيكDataSet ٗدس اثتذا عؼی ِی گشدد و
) . دسGetDataSet ثبصيبثی گشدد ( اعتفبدٖ اص سٚتني
ثبصيبثیcache سا اصDataSet فٛستی وٗ ففسٗ ٔتٛأذ
فشاخٛأذٖ ِی ؽٛد تب پظ اصRetrieveData سمبيذ ، تبثغ
59
Farsiplanet.com
ٗ اضبفcache ٗ دس اداِٗ ثتٛاْ آْ سا ثDataSet تٌٛيذ
. سمٛد
ثشای آگب٘ی وبسثشاْ ِٕجغ اسائٗ اعالػبت ٔيض دس خشٚخی
ٚ cache سمبيؼ دادٖ ِی ؽٛد ( اصمبد ٚ رخريٖ اعالػبت دس
. ) cache يب ثبصيبثی اعالػبت اص
ٚ ٚ يب اصمبدcache اصDataSet ثبصيبثی
cache دسDataSet رخريٖ جمذد
Function GetDataSet() As DataSet
Dim dsPubs As DataSet
If Cache("Titles") Is Nothing Then
dsPubs = RetrieveData()
Cache.Insert("Titles", dsPubs, Nothing,
DateTime.MaxValue, TimeSpan.FromMinutes(2))
اصمبد اعالػبت ٚ رخريٖ آهنب دس lblCacheStatus.Text = "
cache"
Else
dsPubs = CType(Cache("Titles"), DataSet)
cache"ثبصيبثی اعالػبت اص lblCacheStatus.Text = "
End If
Return dsPubs
End Function
لبثً پيىشثٕذی ، وذ ِٛخٛد دسgrid ثشای اسائٗ يه
ْٛ زشوت ٚ شببِی عتDataTable دس cmdApply_Click سٚتني
ٖ٘بئی سا وٗ وبسثش خٙت ػذَ سمبيؼ دس خشٚخی فيٍرت سمٛد
ززف ِی سمبيذ ( لجً اص ززف عتْٛ ٘بئیgrid اعت ، اص
. ) يه ٔغخٗ ثبٔٛيٗ اص آْ اصمبد ِی گشددDataSet اص
دس ايٓ ساثغٗ ؽبيذ ثتٛاْ اص گضيٕٗ ٘بی ِتؼذد ديگشی
اعتفبدٖ سمٛد ٌٚی اعرتاتژی ثىبس گشفتٗ ؽذٖ دس ِثبي
60
Farsiplanet.com
. اعتcaching فٛق ثيبٔگش يه زميمت ُِٙ دس خقٛؿ
صِبٔی وٗ يه آيتُ ثبصيبثی ِی گشدد دس ٚالغ يه ِشخغ
ؽذٖ ثبصيبثی ؽذٖ اعت ٚ اگش ؽی تغيري يبثذcache ثٗ ؽی
. اعت ٗ ؽذٖ تغيري يبفتcache ُ، دس زميمت آيت
فيٍرتيٕگ دادٖ ثش اعبط خٛاعتٗ وبسثش خٙت سمبيؼ
Gridview دس
Sub cmdApply_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles cmdApply.Click
Dim ds As DataSet = GetDataSet()
ds = ds.Copy()
For Each item As ListItem In chkColumns.Items
If item.Selected Then
ds.Tables(0).Columns.Remove(item.Text)
End If
Next
gridPubs.DataSource = ds.Tables(0)
gridPubs.DataBind()
End Sub
. وذ ِثبي فٛق ثغٛس وبًِ دس خذٚي صيش ٔؾبْ دادٖ ؽذٖ اعت
cache دس اعالػبتی ثبٔه اص ٖؽذ ثبصيبثی ٖداد ٖرخري
َٚ اعتفبدٖ اص آْ ثش اعبط خٛاعتٗ وبسثش لجً اص اشبب
ْتبسيخ اػتجبس آ
61
Farsiplanet.com
Sub cmdApply_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles
cmdApply.Click
Dim ds As DataSet = GetDataSet()
ds = ds.Copy()
For Each item As ListItem In chkColumns.Items
If item.Selected Then
ds.Tables(0).Columns.Remove(item.Text)
End If
Next
gridPubs.DataSource = ds.Tables(0)
gridPubs.DataBind()
End Sub
'=====================================================
==================
Function GetDataSet() As DataSet
Dim dsPubs As DataSet
If Cache("Titles") Is Nothing Then
dsPubs = RetrieveData()
Cache.Insert("Titles", dsPubs, Nothing, DateTime.MaxValue,
TimeSpan.FromMinutes(2))
cache"اصمبد اعالػبت ٚ رخريٖ آهنب دس lblCacheStatus.Text = "
Else
dsPubs = CType(Cache("Titles"), DataSet)
cache"ثبصيبثی اعالػبت اص lblCacheStatus.Text = "
End If
Return dsPubs
End Function
'=====================================================
==================
62
Farsiplanet.com
Function RetrieveData() As DataSet
Dim connectionString As String = _
WebConfigurationManager.ConnectionStrings("NORTHWNDConnectionString").Connectio
nString
Dim SQLSelect As String = "SELECT * FROM Customers"
Dim con As New SqlConnection(connectionString)
Dim cmd As New SqlCommand(SQLSelect, con)
Dim adapter As New SqlDataAdapter(cmd)
Dim ds As New DataSet()
Try
con.Open()
adapter.Fill(ds, "Customers")
Finally
con.Close()
End Try
Return ds
End Function
'=====================================================
=================
Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles
Me.Load
If Not Me.IsPostBack Then
Cache.Remove("Titles")
Dim dsPubs As DataSet = GetDataSet()
chkColumns.DataSource = dsPubs.Tables(0).Columns
chkColumns.DataMember = "Item"
chkColumns.DataBind()
End If
End Sub
63
Farsiplanet.com
'===============================================
===============
Untitled Page
عتْٛ ٘بئی سا وٗ لقذ سمبيؼ آهنب دس
:خشٚخی سا ٔذاسيذ ، أتخبة سمبئيذ
فيٍرت ٚ سمبيؼ
Hide Columns:
64
Farsiplanet.com
ؽىً 0 خشٚخی ثشٔبِٗ فٛق سا ٔؾبْ ِی د٘ذ .
ؽىً 0 : رخريٖ دادٖ ثبصيبثی ؽذٖ اص ثبٔه اعالػبتی دس cache
ٚ اعتفبدٖ اص آْ ثش اعبط خٛاعتٗ وبسثش
اداِٗ خٛا٘يُ caching دس خبؼ هنُ حبث خٛد سا ثش سٚی data
داد .
افشايغ كارآئی بزَايّ ْای ٔب در 0.2 ( ASP.NETخبغ هنى)
آٔچٗ تبوْٕٛ گفتٗ ؽذٖ اعت :
: اؽبسٖ ثٗ جمّٛػٗ ای اص ٔىبت وٗ ٚ دَٚ خبؼ ٘بی اٚي
سػبيت آهنب دس صِبْ عشازی ِی تٛأذ صِيٕٗ پيبدٖ عبصی
يه ثشٔبِٗ ٚة وبسآ سا فشاُ٘ سمبيذ .
56
Farsiplanet.com
: ِؼشفی ثشخی اثضاس٘ب ثشای تغت ثشٔبِٗ ٘بی خبؼ عَٛ
ٚة
خبؼ چٙبسَ : ِفب٘يُ اٌٚيٗ ، cachingسٚػ ٘بی cachingدس
، ASP.NETرمٖٛ اعتفبدٖ اص output caching
Query string ٚ Caching خبؼ پٕدُ :
خبؼ ؽؾُ : Custom Caching Control
خبؼ ٘فتُ : cachingدادٖ ٚ رمٖٛ اعتفبدٖ اص ؽی cache
خبؼ ٘ؾتُ : ثشسعی يه ِثبي خٙت اصمبد cachingثب لبثٍيت
ِؾب٘ذٖ چٕذيٓ viewاص دادٖ
cachingاداِٗ دادٖ ٚ حبث خٛد سا ثش سٚی data دس ايٓ خبؼ
ثٗ ثشسعی وٕرتي ٘بی ِٕجغ دادٖ ٚ cachingخٛا٘يُ پشداخت .
ٚ XmlDataSource SqlDataSource ،ObjectDataSource ٘بی وٕرتي
ثغٛس راتی اص اِىبٔبت cachingمحبيت ِی سمبيٕذ . اعتفبدٖ
cachingثٗ شمشاٖ وٕرتي ٘بی فٛق اويذا" تٛفيٗ ِی گشدد اص
چشاوٗ ثشخالف وذ عفبسؽی ٔٛؽتٗ ؽذٖ تٛعظ پيبدٖ وٕٕذگبْ ثٗ
ِٕظٛس دعتيبثی دادٖ ، وٕرتي ٘بی ِٕجغ دادٖ شمٛاسٖ دس ٘ش
postbackيه queryسا ثش سٚی ِٕجغ دادٖ اخشاء ِی سمبيٕذ .
وٕرتي ٘بی فٛق ، شمچٕني ثشای ٘ش وٕرتي ٔغجت د٘ی يه queryدس
عغر ِٕجغ دادٖ سا اخشاء ِی سمبيٕذ . ثٗ ػٕٛاْ سمٛٔٗ اگش
دس يه ففسٗ اص عٗ وٕرتي ٔغجت د٘ی دادٖ دس استجبط ثب يه
ِٕجغ دادٖ يىغبْ اعتفبدٖ ؽذٖ ثبؽذ ، عٗ queryجمضاء ثش
سٚی ثبٔه اعالػبتی ٚ لجً اص تفغري ٚ اسعبي ففسٗ ثشای
ثذيٙی اعت زتی ثب عشٚيظ گرئذٖ ، اخشاء خٛا٘ذ ؽذ .
اعتفبدٖ اص اِىبٔبت أذن cachingثٗ شمشاٖ وٕرتي ٘بی ِٕجغ
66
Farsiplanet.com
، ؽب٘ذ ذبجٛد چؾّگري وبسآئی ٚ وب٘ؼ loadػٍّيبتی دس دادٖ
مست عشٚيظ دٕ٘ذٖ خٛا٘يُ ثٛد .
ثب ايٓ وٗ تؼذاد صيبدی اص وٕرتي ٘بی ِٕجغ دادٖ اص caching
محبيت ِی سمبيٕذ ، ٌٚی ٚيژگی فٛق ثٗ ػٕٛاْ يه ضشٚست دس
ثىبسگريی وٕرتي ٘بی ِٕجغ دادٖ ِغشذ سمی گشدد ٚ ِی تٛاْ اص
وٕرتي ٘بی ِٕجغ دادٖ ئی وٗ اص پتبٔغيً cachingمحبيت سمی
. وشد اعتفبدٖ ٔيض سمبيٕذ
، ObjectDataSource ٘بی وٕرتي caching اص محبيت ثشای
اص خقٍت ٘بی ِؾبذبی اعتفبدٖ XmlDataSource ٚ SqlDataSource
ِی سمبيٕذ . دس خذٚي 0 ، خقٍت ٘بی فٛق ٔؾبْ دادٖ ؽذٖ أذ
.
ػٍّىشد خقٍت
ثب ٔغجت د٘ی ِمذاس Trueثٗ
خقٍت فٛق ، پتبٔغيً caching
فؼبي ِی گشدد . ِمذاس پيؼ EnableCaching
فشك خقٍت فٛق Falseدس ٔظش
گشفتٗ ِی ؽٛد .
صِبْ اعرتاتژی يب ٚ عيبعت
اشببَ تبسيخ اػتجبس cacheسا
ِؾخـ ِی سمبيذ . ثش ايٓ اعبط
ِ CacheExpirationPolicyی تٛاْ ِمذاس خقٍت فٛق سا
ثبثت ٚ يب ِتغري ( ِذت صِبْ
ثني دٚ دسخٛاعت ِتٛاٌی ) دس
ٔظش گشفت .
ِذت صِبْ cachingآيتُ ِٛسد CacheDuration
76
Farsiplanet.com
زغت ثش سا cache دس ٔظش
ِؾخـ ِی سمبيذ . ثبٔيٗ
اِىبْ اصمبد يه ٚاثغتگی ثني
يه آيتُ cacheؽذٖ ثب آيتُ
ثب ( data cache دس ديگش
اص CacheKeyDependencyاعتفبدٖ
ٚ ) CacheKeyDependencyيب يه ٚ
SqlCacheDependency
اعالػبتی(ثب ثبٔه خذٚي
اعتفبدٖ اص SqlCacheDependency
) سا فشاُ٘ ِی سمبيذ .
خذٚي 0 : خقٍت ٘بی cachingوٕرتي ٘بی ِٕجغ دادٖ
SqlDataSource دادِ يُبغ كُرتل در Caching
cachingدس وٕرتي ، SqlDataSource پظ اص فؼبي وشدْ پتبٔغيً
ِی گشدد ِبزقً اخشای SelectQueryثشای اعتفبدٖ آتی Cache
select queryپبساِرتيه ، وٕرتي فٛق . دس فٛست اخشاء يه
ثشای ٘ش جمّٛػٗ اص ِمبديش پبساِرت٘ب يه ٔغخٗ خذاگبٔٗ سا
ِ cacheی سمبيذ .
وٗ دس ِثال" فشك وٕيذ لقذ داسمي ففسٗ ای سا اصمبد سمبئيُ
آْ ٌيغت وبسوٕبْ ثش اعبط ٔبَ ؽٙش سمبيؼ دادٖ ؽٛد . پظ اص
أتخبة ؽٙش تٛعظ وبسثش ، اص يه وٕرتي SqlDataSourceثشای
ثشگشدأذْ سوٛسد٘بی وبسوٕبٔی وٗ ثب ٔبَ ؽٙش ِغبثمت ِی
سمبيٕذ خٙت سمبيؼ دس يه gridاعتفبدٖ ؽذٖ اعت .
86
Farsiplanet.com
ثب ٘ذف فؼبيSqlDataSource وذ صيش رمٖٛ اعتفبدٖ اص وٕرتي
. سا ٔؾبْ ِی د٘ذcaching ْوشد
"
SelectCommand="SELECT EmployeeID, FirstName, LastName, Title, City
FROM Employees WHERE City=@City">
query دس ِثبي فٛق ، پظ اص أتخبة ؽٙش تٛعظ وبسثش ، يه
خذاگبٔٗ اخشاء خٛا٘ذ ؽذ تب ٌيغت وبسوٕبْ ثب تٛخٗ ثٗ ؽٙش
ٗ ثٗ ِيضاْ 10 دليمDataSet أتخبة ؽذٖ ، ثبصيبثی ٚ دس يه
گشدد . دس فٛست أتخبة يه ؽٙشcache ، ) ٗ( 116 ثبٔي
DataSet ديگش تٛعظ وبسثش ، پشداصػ فٛق تىشاس ٚ جمذدا" يه
ِی گشدد. دس فٛست أتخبة يه ؽٙش تٛعظcache ٚ خذيذ اصمبد
، وبسثشی وٗ لجال" تٛعظ وبسثشاْ ديگش أتخبة ؽذٖ اعت
ٗ ثبصيبثی خٛا٘ذ ؽذ ( ِؾشٚط ثcache ِٛسد ٔظش اصDataSet
. ) cache دس ْآ زضٛس اػتجبس ْصِب ِذت َاشبب َػذ
DataSourceMode تٛخٗ داؽتٗ ثبؽيذ صِبٔی وٗ ِمذاس خقٍت
، ) دس ٔظش گشفتٗ ؽذٖ ثبؽذ (ِمذاس پيؼ فشكDataSet ِؼبدي
ثٗ خٛثیSqlDataSource ٖ دس وٕرتي ِٕجغ دادcaching ًپتبٔغي
69
Farsiplanet.com
وبس ِی وٕذ . ؽی DataReaderسمی تٛأذ ثغٛس ِٛثش cache
گشدد چشاوٗ ؽی فٛق لبدس ثٗ ثشلشاسی يه استجبط ِغتميُ ٚ
. ثبؽذ سمی اعالػبتی ثبٔه ثب صٔذٖ
دس فٛستی وٗ ثشخی پبساِرت٘ب ٔغجت ثٗ پبساِرت٘بی ديگش ثب
فشوبٔظ ثيؾرتی اعتفبدٖ ؽذٖ ثبؽٕذ ، cachingخذاگبٔٗ ٔتبيح
ِمبديش خمتٍف پبساِرت٘ب ٚضؼيت ِغٍٛثرتی سا ثٗ ثب تٛخٗ ثٗ
دٔجبي خٛا٘ذ داؽت . ِثال" اگش ٔتبيح ِشثٛط ثٗ ؽٙش "" X
دبشاتت ثيؼ اص ٔتبيح ؽٙش " "Yدسخٛاعت گشدد ، ايٓ اعّيٕبْ
وٗ ٔتبيح ؽٙش " "Xدبشاتت ثيؼ تش دس cache اصمبد خٛا٘ذ ؽذ
ثبلی خٛإ٘ذ ِبٔذ زتی اگش ِ DataSetشثٛط ثٗ ؽٙش " "Yاص
. ثبؽذ ؽذٖ خبسج زبفظٗ
ثٗ ػجبست ديگش ، دس فٛستی وٗ ِمبديش پبساِرت ٘ب مجٍگی ثب
فشوبٔظ ِؾبذبی اعتفبدٖ ؽٛٔذ ، سٚػ فٛق يه ساٖ زً ِٕبعت
سمی ثبؽذ . يىی اص ِغبئً ِشتجظ ثب ساٖ زً فٛق ، صِبٔی
اعت وٗ ِذت صِبْ زضٛس آيتُ ٘بی cacheؽذٖ ثٗ اشببَ سعيذٖ
ثبؽذ ٚ الصَ اعت وٗ خٕذيٓ queryسا ثش سٚی ثبٔه اخشاء سمٛد
تب ٔغخٗ ٘بی خذاگبٔٗ ای اص cacheسا اصمبد سمبيذ ( ٔغخٗ
٘بی cacheخذاگبٔٗ ثب تٛخٗ ثٗ ِمذاس پبساِرت ) . لغؼب"
سٚػ فٛق داسای وبسآئی دبشاتت وّرتی ٔغجت ثٗ زبٌتی اعت وٗ
. گشدد ِی ثبصيبثی query يه ثب فشفب" ٔتبيح شببِی
سا وبسوٕبْ سوٛسد٘بی شببِی تٛاْ ِی ِٛاسدی چٕني دس
وٕرتي ، اداِٗ دس . سمٛد رخريٖ cache دس ٚ ثبصيبثی
سا ٔيبص ِٛسد سوٛسد٘بی فشفب" تٛأذ ِی SqlDataSource
ِتٕبعت ثب دسخٛاعت وبسثش اص DataSetثبصيبثی سمبيذ . ثذيٓ
تشتيت ، يه DataSetثٗ شمشاٖ شببِی سوٛسد٘بی cacheؽذٖ ِی
تٛأذ فشفٕظش اص ِمذاس پبساِرت دسيبفتی پبعخگٛ ثبؽذ .
ثشای ٔيً ثٗ خٛاعتٗ فٛق ، ِی ثبيغت دٚ تغيري اعبعی سا دس
07
Farsiplanet.com
. سمٛد اػّبي فٛق وذ
select : ثبصيبثی شببِی سوٛسد٘ب ثب اعتفبدٖ اص أنني تغيري
) . وذ صيش رمٖٛ ( ػذَ اعتفبدٖ اص SelectParameter query
اذمبَ ايٓ وبس سا ٔؾبْ ِی د٘ذ :
"...
>FilterParametersؾخـ ؽذٖ اعت ، فشاُ٘ ِی گشدد .
وذ صيش رمٖٛ تؼشيف وٕرتي ِٕجغ دادٖ SqlDataSourceسا پظ اص
اػّبي دٚ تغيري فٛق ٔؾبْ ِی د٘ذ .
""
SelectCommand="SELECT EmployeeID, FirstName, LastName,
Title, City FROM Employees"
FilterExpression="City='{0}'"
EnableCaching="True">
، caching اص ٖاعتفبد َػذ فٛست دس ثبؽيذ ٗداؽت ٗتٛخ
ضشٚستی ثٗ فؼبي وشدْ فيٍرتيٕگ ٚخٛد ٔذاسد . چشاوٗ دس
، دس ٚالغ شببِی caching ْٚفٛست اعتفبدٖ اص فيٍرتيٕگ ثذ
ثبصيبثی خٛا٘ذ ؽذ تب دس اداِٗ ثتٛاْ خبؾی اص result set
سوٛسد٘بی آْ سا ثبصيبثی وشد . ثذيٓ تشتيت ، پظ اص ٘ش
ْ ٚ ثذْٚ تٛخيٗ ِٕغمی شببِی سوٛسد٘ب ( ثيؼ اص آpostback
. چيضی وٗ ِٛسد ٔيبص اعت ) ، ثبصيبثی ِی گشدد
ObjectDataSource در كُرتلcaching
ٖ ثب اؽيبء دادٖ ثشگشدأذObjectDataSource وٕرتي caching
ثٗ خٛثی وبس ِی وٕذ . دس فٛستSelectMethod ؽذٖ تٛعظ
ObjectDataSource وٕرتي ، پبساِرتيهquery اعتفبدٖ اص يه
cache ٗٔدسخٛاعت ٘بئی ثب پبساِرت٘بی خمتٍف سا ثغٛس خذاگب
.سمبيذ ِی
ٗداسای يه حمذٚديت لبثً ِالزظ ObjectDataSource وٕرتيcaching
آْ يهSelectMethod ٗاعت ٚ فشفب" صِبٔی وبس ِی وٕذ و
72
Farsiplanet.com
يب DataTableسا ثشِی گشدأذ . دس فٛست ثشگشدأذْ DataSet
NotSupportedException يه ثب ، ديگش دادٖ اؽيبء ٔٛع ٘ش
ِٛاخٗ خٛا٘يُ ؽذ .
ثشای غٍجٗ ثش حمذٚديت فٛق ِی تٛاْ پيبدٖ عبصی data caching
سا دسْٚ ِتذ ِشثٛعٗ اذمبَ ٚ الذاَ ثٗ دسج دعتی اؽيبء
دسْٚ cache dataوشد. دس ٚالغ ، cachingدسْٚ ِتذ ِٛسد ٔظش
ِی تٛأذ وبسآئی دبشاتت ذبرتی سا ٔيض ثٗ دٔجبي داؽتٗ ثبؽذ
چشاوٗ اِىبْ ثٗ اؽرتان گزاؽنت اؽيبء cacheؽذٖ ِؾبثٗ ثني
چٕذيٓ ِتذ فشاُ٘ ِی گشدد . ِثال" ِی تٛاْ يه DataTable
زبٚی ٌيغتی اص حمقٛالت سا ٚ cacheدس اداِٗ اص آيتُ ٘بی
ٚ GetProductCategories ِتذ٘بی دس ؽذٖ cache
. سمٛد اعتفبدٖ GetProductsByCategory
اداِٗ دادٖ ٚ caching دس خبؼ دُ٘ حبث خٛد سا ثش سٚی data
ثٗ ثشسعی cachingثب ٚاثغتگی ( )Dependencyخٛا٘يُ پشداخت .
افشايغ كارآئی بزَايّ ْای ٔب در 0.2 ( ASP.NETخبغ دْى)
آٔچٗ تبوْٕٛ گفتٗ ؽذٖ اعت :
: اؽبسٖ ثٗ جمّٛػٗ ای اص ٔىبت وٗ ٚ دَٚ خبؼ ٘بی اٚي
سػبيت آهنب دس صِبْ عشازی ِی تٛأذ صِيٕٗ پيبدٖ عبصی
يه ثشٔبِٗ ٚة وبسآ سا فشاُ٘ سمبيذ .
: ِؼشفی ثشخی اثضاس٘ب ثشای تغت ثشٔبِٗ ٘بی خبؼ عَٛ
ٚة
خبؼ چٙبسَ : ِفب٘يُ اٌٚيٗ ، cachingسٚػ ٘بی cachingدس
، ASP.NETرمٖٛ اعتفبدٖ اص output caching
37
Farsiplanet.com
Query string ٚ Caching خبؼ پٕدُ :
خبؼ ؽؾُ : Custom Caching Control
خبؼ ٘فتُ : cachingدادٖ ٚ رمٖٛ اعتفبدٖ اص ؽی cache
خبؼ ٘ؾتُ : ثشسعی يه ِثبي خٙت اصمبد cachingثب لبثٍيت
ِؾب٘ذٖ چٕذيٓ viewاص دادٖ
خبؼ هنُ : وٕرتي ٘بی ِٕجغ دادٖ ٚ caching
اداِٗ دادٖ ٚ caching دس ايٓ خبؼ حبث خٛد سا ثش سٚی data
ثٗ ثشسعی cachingثب ٚاثغتگی ( )Dependencyخٛا٘يُ پشداخت .
Cachingبا ٔابظتگی
ِب٘يت ِٕبثغ دادٖ ٔظري يه ثبٔه اعالػبتی ثگٛٔٗ ای اعت وٗ
ثٗ ِشٚس صِبْ اعالػبت دسْٚ آهنب تغيري ِی يبثذ . دس فٛستی
وٗ دس يه ثشٔبِٗ اص cachingاعتفبدٖ ِی گشدد ، شمٛاسٖ ايٓ
ازتّبي ٚخٛد خٛا٘ذ داؽت وٗ اعالػبت ِٛخٛد دس ِ cacheتبثش
اص ايٓ تغيريات ٔجبؽذ ٚ دادٖ ذبٕگبَ ٔؾذٖ اص cacheاعتخشاج
ؽٛد. گزاؽتٗ وبسثشاْ اختيبس دس ٚ
ثشای وّه دس خٙت زً ايٓ ٔٛع ِؾىالت ، ASP.NETاص caching
ثب ٚاثغتگی محبيت ِی سمبيذ . ثب اعتفبدٖ اص ٚيژگی فٛق ايٓ
اِىبْ دس اختيبس پيبدٖ وٕٕذگبْ لشاس ِی گريد تب ثتٛإٔذ
سا ثٗ ِٕبثغ ديگشی ٚاثغتٗ سمبيٕذ زضٛس يه آيتُ دس cache
. دس چٕني ِٛاسدی ، صِبٔی وٗ دس ِٕجغ ِٛسد ٔظش تغيرياتی
اصمبد گشديذ ، آيتُ cacheؽذٖ ثغٛس اتِٛبتيه اص cacheخبسج
. گشدد ِی
ASP.NETاص عٗ ٔٛع ٚاثغتگی محبيت ِی سمبيذ :
ٚاثغتگی ثب عبيش آيتُ ٘بی Cacheؽذٖ
47
Farsiplanet.com
ٚاثغتگی ثب فبيً ٘ب ٚ يب فٌٛذس٘ب
ٚاثغتگی ثب يه queryثبٔه اعالػبتی
ؽی يه ثبيغت ِی ، ٚاثغتٗ cache يه اصمبد ثشای
CacheDependencyاصمبد ٚ دس اداِٗ اص آْ دس صِبْ اضبفٗ
. وشد اعتفبدٖ cache ثٗ ٔظش ِٛسد آيتُ وشدْ
وذ صيش يه آيتُ cacheؽذٖ سا اصمبد وٗ ثغٛس اتِٛبتيه ٚ پظ
اص اصمبد تغيريات دس فبيً xmlاص cacheخبسج ِی ؽٛد .
اصمبد يه ٚاثغتگی ثشای فبيً ProductList.xml
Dim prodDependency As New
))"CacheDependency(Server.MapPath("ProductList.xml
ؽی اص cache دس ٔظش ِٛسد آيتُ دسج صِبْ دس
CacheDependencyاصمبد ؽذٖ دس ِشزٍٗ لجً اعتفبدٖ ِی گشدد .
اضبفٗ وشدْ يه آيتُ دس cacheوٗ زضٛس آْ دس
ٚاثغتٗ ِی گشدد ProductList.xml cacheثٗ فبيً
)Cache.Insert("ProductInfo", prodInfo, prodDependency
پظ اص اصمبد ؽی ِ ، CacheDependencyبٔيتٛسيٕگ آغبص ِی گشدد
. دس فٛستی وٗ فبيً xmlلجً اص افضٚدْ آيتُ ٚاثغتٗ ثٗ
دسْٚ cacheتغيري يبفتٗ ثبؽذ ، ثالفبفٍٗ تبسيخ اػتجبس آيتُ
ِٛسدٔظش پظ اص افضٚدْ ثٗ cacheثٗ پبيبْ ِی سعذ .
constructorسا اسائٗ ِی سمبيذ . CacheDependencyچٕذيٓ ؽی
دس ِثبي لجً ِؾب٘ذٖ گشديذ وٗ چگٛٔٗ ؽی فٛق لبدس ثٗ اصمبد
يه ٚاثغتگی ثش اعبط يه فبيً اعت وٗ ٔبَ آْ ثٗ ػٕٛاْ
57
Farsiplanet.com
يه تٛاْ ِی شمچٕني . ؽٛد ِی گشفتٗ ٔظش دس constructor
دايشوتٛسی سا ِؼشفی تب تغيريات آْ ِبٔيتٛس گشدد .
يثال : اجياد ٔ درج يك آيتى درٌٔ cacheكّ حضٕر آٌ در
گزدد يی ٔابظتّ فايم يك بّ cache
دس ايٓ ِثبي ثب اصمبد يه ؽی ٚاثغتٗ ( يه فبيً ، ) textيه
ػجبست ( " آيتُ cacheؽذٖ ٚاثغتٗ " ) ٚاثغتٗ ثٗ ؽی فٛق
سا دس cacheلشاس ِی د٘يُ . تب صِبٔی وٗ دادٖ ِٛخٛد دس
ثبلی ِی فبيً textتغيري ٔيبثذ ، آيتُ ِٛسد ٔظش دس cache
ِبٔذ ٚ ِی تٛاْ اص آْ اعتفبدٖ وشد . دس فٛست تغيري دس ؽی
ٚاثغتٗ ( فبيً ) dependency.txtاػتجبس آيتُ cacheؽذٖ ثٗ
اشببَ سعيذٖ ٚ ثغٛس اتِٛبتيه اص cacheخبسج ِی ؽٛد .
دس ايٓ ثشٔبِٗ اص دٚ buttonثٗ ٔبَ " تغيري فبيً " ٚ "
ثشسعی آيتُ cacheؽذٖ " اعتفبدٖ ؽذٖ اعت . ثب اعتفبدٖ اص
دوّٗ "ثشسعی آيتُ cacheؽذٖ " ، زضٛس آيتُ ِٛسد ٔظش دس
cacheثشسعی ٚ پيبَ ِٕبعت دس خشٚخی سمبيؼ دادٖ ِی ؽٛد .
دس فٛست وٍيه ثش سٚی دوّٗ "تغيري فبيً " ، حمتٛيبت ؽی
) تغيري يبفتٗ ٚ آيتُ ِٛسد ٚاثغتٗ ( فبيً dependency.txt
اص cacheخبسج ِی گشدد . ٔظش
وذ ثشٔبِٗ فٛق دس خذٚي صيش ٔؾبْ دادٖ ؽذٖ اعت .
ثب ٚاثغتگی ثٗ يه ؽی ( فبيً ) دس cache دسج يه آيتُ
>% "% "
'=====================================================
================
Sub cmdModify_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles
cmdModify.Click
"ٗ تغيري فبيً ٚاثغتlblInfo.Text &= "
Dim w As StreamWriter = File.CreateText(Server.MapPath("dependency.txt"))
w.Write(DateTime.Now)
w.Flush()
w.Close()
End Sub
'=====================================================
================
Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles
Me.Load
If Not Me.IsPostBack Then
"ٗاصمبد آيتُ ٚاثغت lblInfo.Text &= "
Cache.Remove("File")
Dim dependency As New System.Web.Caching.CacheDependency( _
Server.MapPath("dependency.txt"))
"ٗ ؽذٖ ٚاثغتcache ُآيت Dim item As String = "
"ٗاضبفٗ وشدْ آيتُ ٚاثغت lblInfo.Text &= "
Cache.Insert("File", item, dependency)
End If
End Sub
'=====================================================
================
Sub cmdGetItem_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Handles cmdGetItem.Click
If Cache("File") Is Nothing Then
ْ ِٛخٛد سمی ثبؽذ ٚ اِىبcache آيتُ ِٛسد ٔظش دس lblInfo.Text &= "
"ثبصيبثی آْ ٚخٛد ٔذاسد
Else
77
Farsiplanet.com
Dim cacheInfo As String = CType(Cache("File"), String)
ْ ِٛخٛد اعت ٚ اِىبْ ثبصيبثی آcache آيتُ ِٛسد ٔظش دس lblInfo.Text &= "
"ٚخٛد داسد
End If
End Sub
'=====================================================
================
caching
" Width="103px" ًتغيري فبي
" ٖ ؽذcache ُثشسعی آيت
. خشٚخی ِثبي فٛق دس ؽىً 0 ٔؾبْ دادٖ ؽذٖ اعت
78
Farsiplanet.com
ؽىً 0 : اصمبد ٚ cachingاثغتٗ ثٗ يه ؽی ( فبيً )
تٕضيحات :
دس صِبْ فشاخٛأی ثشٔبِٗ فٛق اص عشيك سٚتني Page_laod
: ؽٛد ِی اذمبَ صيش ػٍّيبت
( dependencyيه فبيً ِنت ثب ٔبَ اصمبد يه ؽی -
) dependency.txt
" آيتُ - دسج آيتُ ِٛسد ٔظش ثب ٔبَ ِ ٚ Fileمذاس
cache دس " ٚاثغتٗ ؽذٖ cache
٘بی ِٕبعت دس خشٚخی ثٗ وّه وٕرتي عشٚيظ - سمبيؼ پيبَ
) lblInfo دٕ٘ذٖ ( labelثب ٔبَ
سٚتني ٚ ، cmdGetItem_Clickخٛد آيتُ ِٛسد ٔظش سا دس
Cacheثشسعی ٚ دس فٛستی وٗ ايٓ آيتُ دس ِٛ cacheخٛد
ٔجبؽذ يه پيبَ خبؿ اص عشيك وٕرتي عشٚيظ دٕ٘ذٖ labelدس
خشٚخی سمبيؼ دادٖ ِی ؽٛد . دس فٛست ٚخٛد آيتُ ِٛسد
ٔظش دس ِ ، cacheمذاس آْ اص cacheثبصيبثی ٚ يه پيبَ
خبؿ اص عشيك وٕرتي عشٚيظ دٕ٘ذٖ labelدس خشٚخی سمبيؼ
دادٖ ِی ؽٛد .
سٚتني ِ ، cmdModify_Clickغئٌٛيت اصمبد تغيري دس فبيً
ٚاثغتٗ ( ٔبَ ) dependency.txtسا ثشػٙذٖ داسد . دس
97
Farsiplanet.com
سٚتني فٛق پظ اص اصمبد فبيً ، تبسيخ خبسی عيغتُ دس آْ
ٔٛؽتٗ ِی گشدد .
، يىی اص ٔٛع ٘بی پيچيذٖ dependency SQL Server cache
0.2 ASP.NETاسائٗ ؽذٖ اعت . ثب ٚ cachingاثغتٗ اعت وٗ دس
ؽی دادٖ cache اعتفبدٖ اص ٚيژگی فٛق ثغٛس اتِٛبتيه يه
پظ اص تغيري دادٖ ِشتجظ دس ثبٔه ؽذٖ ( ٔظري يه ) DataSet
SQL اعالػبتی ، غري ِؼترب ِی گشدد . اص پتبٔغيً فٛق دس دس
Server 2000 SQL ٚ ) Express Edition ( ؽبًِ 5002 Server
محبيت ِی گشدد .
اداِٗ دادٖ caching دس خبؼ يبصدُ٘ حبث خٛد سا ثش سٚی data
خٛا٘يُ پشداخت . ٚ ثٗ ثشسعی SQL Server cache dependency
افشايغ كارآئی بزَايّ ْای ٔب در 0.2 ( ASP.NETخبغ ياسدْى)
آٔچٗ تبوْٕٛ گفتٗ ؽذٖ اعت :
: اؽبسٖ ثٗ جمّٛػٗ ای اص ٔىبت وٗ ٚ دَٚ خبؼ ٘بی اٚي
سػبيت آهنب دس صِبْ عشازی ِی تٛأذ صِيٕٗ پيبدٖ عبصی
يه ثشٔبِٗ ٚة وبسآ سا فشاُ٘ سمبيذ .
: ِؼشفی ثشخی اثضاس٘ب ثشای تغت ثشٔبِٗ ٘بی خبؼ عَٛ
ٚة
خبؼ چٙبسَ : ِفب٘يُ اٌٚيٗ ، cachingسٚػ ٘بی cachingدس
، ASP.NETرمٖٛ اعتفبدٖ اص output caching
Query string ٚ Caching خبؼ پٕدُ :
خبؼ ؽؾُ : Custom Caching Control
خبؼ ٘فتُ : cachingدادٖ ٚ رمٖٛ اعتفبدٖ اص ؽی cache
08
Farsiplanet.com
خبؼ ٘ؾتُ : ثشسعی يه ِثبي خٙت اصمبد cachingثب لبثٍيت
ِؾب٘ذٖ چٕذيٓ viewاص دادٖ
خبؼ هنُ : وٕرتي ٘بی ِٕجغ دادٖ ٚ caching
ثشسعی cachingثب ٚاثغتگی ()Dependency خبؼ دُ٘ :
اداِٗ دادٖ ٚ caching دس ايٓ خبؼ حبث خٛد سا ثش سٚی data
خٛا٘يُ پشداخت . ثٗ ثشسعی SQL Server cache dependency
، يىی اص ٔٛع ٘بی پيچيذٖ dependency SQL Server cache
0.2 ASP. NETاسائٗ ؽذٖ اعت . ثب ٚ cachingاثغتٗ اعت وٗ دس
ؽی دادٖ cache اعتفبدٖ اص ٚيژگی فٛق ثغٛس اتِٛبتيه يه
پظ اص تغيري دادٖ ِشتجظ دس ثبٔه ؽذٖ ( ٔظري يه ) DataSet
SQL اعالػبتی ، غري ِؼترب ِی گشدد . اص پتبٔغيً فٛق دس دس
Server 2000 SQL ٚ ) Express Edition ( ؽبًِ 5002 Server
محبيت ِی گشدد .
طيظتى آگاِ طاسی cachingدر SQL Server ٔ 0222 SQL Server
7
SQL Server ٚ 2111 SQL Server ASP. NETاص ِذي poolingثشای
ٚ اعتفبدٖ ِی سمبيذ . ٔغخٗ ٘بی لذميی تش Server SQL 7
عبيش ثبٔه ٘بی اعالػبتی اص ٚيژگی فٛق محبيت سمی سمبيٕذ .
دس ايٓ سٚػ ، ASP.NETيه استجبط ثبص ثب ثبٔه اعالػبتی سا
ٔگبٖ داؽتٗ ٚ ثٗ فٛست دٚسٖ ای ثشٚص ٘ش گٛٔٗ تغيري دس يه
ثٗ خذٚي سا ثشسعی ِی سمبيذ . ٔگٙذاسی يه اتقبي ثبص
ٚ ِٕضٌٗ ثشٚص يه فبخؼٗ دس عغر ثبٔه اعالػبتی سمی ثبؽذ
فشفب" وبس اضبفٗ تشی دس عغر ثبٔه اعالػبتی اصمبد ِی گشدد
18
Farsiplanet.com
داسد. سا خٛد ثٗ خمتـ فشآيٕذ آْ اذمبَ وٗ
ثٗ ِٕظٛس ذبشٖ گريی ثيؾرت ٚ ِٛثش اص ِذي ِ ، poolingی ثبيغت
فشآيٕذ poolingعشيغ تش ٚ عجه تش اص queryاٌٚيٗ ای ثبؽذ
وٗ ِغئٌٛيت اعتخشاج دادٖ اص ثبٔه اعالػبتی سا ثشػٙذٖ
. داسد
٘ذف عيغتُ آگبٖ عبصی ، cachingتؾخيـ ثٗ ِٛلغ اذمبَ تغيريات
دس خذاٚي يه ثبٔه اعالػبتی ٚ غريِؼترب وشدْ دادٖ cacheؽذٖ
. اعت اص خذاٚي يه ٘ش ثب ِشتجظ
ثشای فؼبي وشدْ عيغتُ آگبٖ عبصی دس 0002 ِ SQL Serverی
ثبيغت ِشازً صيش سا دٔجبي سمٛد :
ِشزٍٗ اٚي : ِؾخـ وشدْ خذاٌٚی اص ثبٔه اعالػبتی وٗ
ٔيبصِٕذ محبيت اص عيغتُ آگبٖ عبصی ِ cachingی ثبؽٕذ .
ِشزٍٗ دَٚ : فؼبي وشدْ عيغتُ آگبٖ عبصی cachingثش
سٚی ثبٔه اعالػبتی ِٛسد ٔظش ثٗ وّه ثشٔبِٗ خظ دعتٛسی
aspnet_regsql.exe
ِشزٍٗ عَٛ : سصمغرت وشدْ خذاٌٚی وٗ ٔيبصِٕذ محبيت اص
ِٕظٛس ثذيٓ . ثبؽذ ِی caching عبصی آگبٖ عيغتُ
اص ثشٔبِٗ خظ دعتٛسی ٚ aspnet_regsql.exeايٓ جمذدا"
ِشتجٗ دس عغر خذٚي اعتفبدٖ ِی گشدد .
فبيً عشيك اص polling وشدْ فؼبي : چٙبسَ ِشزٍٗ
web.config
اؽيبء تٛاْ ِی فٛق چٙبسگبٔٗ ِشازً اذمبَ اص پظ
. سمٛد اصمبد سا SqlCacheDependency
دس اداِٗ ٘ش يه اص ِشازً فٛق سا ثب خضئيبت ثيؾرتی ثشسعی
. سمبئيُ ِی
28
Farsiplanet.com
وٗ اعالػبتی ثبٔه اص خذاٌٚی وشدْ ِؾخـ : أل يزحهّ
ٔيبصِٕذ محبيت اص عيغتُ آگبٖ عبصی ِ cachingی ثبؽٕذ .
ثذيٓ ِٕظٛس الصَ اعت وٗ دس اٌٚني الذاَ ثبٔه اعالػبتی ٚ
خذاٌٚی وٗ الصَ اعت ثش سٚی آهنب عيغتُ آگبٖ عبصی caching
ثبٔه أتخبة . گشدٔذ أتخبة ٚ ؽٕبعبئی ، ؽٛد فؼبي
عالػبتی ٚ خذاٚي ِشثٛعٗ ثٗ سفتبس يه ثشٔبِٗ ٚ أتظبسات
اص آْ ثغتگی داسد وٗ ِی ثبيغت تٛعظ عشازبْ ٚ پيبدٖ
. وٕٕذگبْ ثشٔبِٗ ٘بی ٚة ثٗ دلت اذمبَ ؽٛد
يزحهّ دٔو : فؼبي وشدْ عيغتُ آگبٖ عبصی cachingثش سٚی
دعتٛسی خظ ثشٔبِٗ وّه ثٗ ٔظش ِٛسد اعالػبتی ثبٔه
aspnet_regsql.exe
لجً اص ايٓ وٗ ثتٛاْ اص عيغتُ غريِؼترب عبصی Cacheدس SQL
Serverاعتفبدٖ سمٛد ، ِی ثبيغت عيغتُ آگبٖ عبصی cachingسا
ثشای ثبٔه اعالػبتی ِٛسد ٔظش فؼبي وشد . ثٗ ِٕظٛس اذمبَ
وٗ دس aspnet_regsql.exe ايٓ وبس اص ثشٔبِٗ خظ دعتٛسی
ِٛخٛد اعت [ c:\[WinDir]\Microsoft.NET\Framework\[Version ِغري
ثشٔبِٗ فٛق يه اثضاس ِذيشيتی ثشای ، اعتفبدٖ ِی گشدد .
فؼبي وشدْ ٚ غريفؼبي وشدْ ٚيژگی ٘بی ASP.NETثش سٚی يه
ايٓ ثشٔبِٗ داسای عٛئيچ ٘بی عشٚيظ دٕ٘ذٖ SQLاعت .
ِتؼذدی اعت . ، edيىی اص عٛئيچ ٘بی ايٓ دعتٛس اعت وٗ
SQL cache dependencyثش سٚی يه اص آْ ثشای فؼبي وشدْ
اص عٛئيچ Eثٗ ثبٔه اعالػبتی اعتفبدٖ ِی گشدد . شمچٕني ،
اص ِٕظٛس ِؾخـ وشدْ سٚػ تبئيذ ثش اعبط يه اتقبي اميٓ ٚ
عٛئيچ dثشای ِؾخـ وشدْ ثبٔه اعالػبتی وٗ لشاس اعت عيغتُ
آگبٖ عبصی cachingثش سٚی آْ فؼبي گشدد ، اعتفبدٖ ِی ؽٛد
38
Farsiplanet.com
.
aspnet_regsql.exeثٗ دعتٛس صيش رمٖٛ اعتفبدٖ اص ثشٔبِٗ
ِٕظٛس فؼبي وشدْ عيغتُ آگبٖ عبصی cachingثش سٚی ثبٔه
اعالػبتی AspNetاعتبٔذاسد ِٛخٛد ثش سٚی عشٚيظ دٕ٘ذٖ خبسی
سا ٔؾبْ ِی د٘ذ .
aspnet_regsql -ed -E
-d AspNet
ٔبَ ثب خذيذ خذٚي يه ، فٛق ػٍّيبت اذمبَ اص پظ
SqlCacheTablesForChangeNotificationثٗ ثبٔه اعالػبتی ثب ٔبَ
عتْٛ عٗ داسای فٛق خذٚي گشدد. ِی اضبفٗ AspNet
اص آْ ثشای changeId ٚ tableName ،notificationCreatedاعت ٚ
. گشدد ِی اعتفبدٖ تغيريات اذمبَ پيگريی
ثب خذٚي فٛق تؼبًِ ثشلشاس ٚ اص عشٚيظ pollingدس ASP.NET
آْ ثٗ ِٕظٛس اسائٗ خذِبت خٛد اعتفبدٖ ِی سمبيذ . عيغتُ
فٛق ٚ رمٖٛ پيبدٖ عبصی آْ ِضايبی ِتؼذدی سا ثٗ دٔجبي
داسد :
ثب تٛخٗ ثٗ ايٓ وٗ خذٚي آگبٖ عبصی تغيريات دبشاتت
وٛچىرت اص خذٚي زبٚی دادٖ cacheؽذٖ اعت ، عشػت اخشای
queryثش سٚی آْ عشيؼرت خٛا٘ذ ثٛد .
ثب تٛخٗ ثٗ ػذَ اعتفبدٖ اص خذٚي آگبٖ عبصی ثشای
فؼبٌيت ٘بی ديگش ، دس صِبْ خٛأذْ سوٛسد٘بی آْ ثب
ِٛاخٗ شمضِبٔی ٚ سوٛسد٘ب وشدْ لفً شمچْٛ ِغبئٍی
. زمٛا٘يُ ؽذ
ثبتٛخٗ ثٗ ايٓ وٗ چٕذيٓ خذٚي دس يه ثبٔه اعالػبتی
ِؾبثٗ اص يه خذٚي آگبٖ عبصی ِؾبثٗ اعتفبدٖ ِی سمبيٕذ
48
Farsiplanet.com
، ِی تٛاْ چٕذيٓ خذٚي سا ثذْٚ افضايؼ ٘ضيٕٗ ٘بی
وشد. ثبالعشی poolingدس يه حلظٗ ِبٔيتٛس
يزحهّ طٕو : سصمغرت وشدْ خذاٌٚی وٗ ٔيبصِٕذ محبيت اص عيغتُ
ثبؽذ. ِی caching عبصی آگبٖ
ِی ، SqlCacheTablesForChangeNotification اصمبد خذٚي اص پظ
ثبيغت ثشای ٘ش خذٚي ِٛخٛد دس ثبٔه اعالػبتی عيغتُ آگبٖ
اص تٛاْ ِی ِٕظٛس ثذيٓ . گشدد فؼبي caching عبصی
وبسثشدی ثشٔبِٗ يب ٚ SqlCacheRegisterTableStoredProcedure
( - etفؼبي وشدْ ثٗ شمشاٖ پبساِرت ٘بی aspnet_regsql
ٔ ( - tبَ خذٚي ) عيغتُ آگبٖ عبصی ثش سٚی يه خذٚي ) ٚ
اعتفبدٖ سمٛد .
ثشای خذٚي دعتٛس صيش رمٖٛ فؼبي وشدْ عيغتُ آگبٖ عبصی سا
ثبٔه اعالػبتی ٔ Northwindؾبْ ِی د٘ذ . Employees
aspnet_regsql -et -E -d
Northwind -t Employees
پظ اص اخشای دعتٛس فٛق ، triggerآگبٖ عبصی cachingثشای
خذٚي Employeesاصمبد ِی گشدد .
يزحهّ چٓارو : فؼبي وشدْ pollingاص عشيك فبيً web.config
polling اػالَ ِی گشدد وٗ اص ASP.NET دس ايٓ ِشزٍٗ ثٗ
. سمبيذ اعتفبدٖ اعالػبتی ثبٔه
sqlCacheDepency ثشای فؼبي وشدْ عشٚيظ pollingاص ػٕقش
الصَ دس فبيً web.configاعتفبدٖ ِی گشدد . ثذيٓ ِٕظٛس
اعت وٗ خقٍت ِ enabledمذاس trueسا داؽتٗ ثبؽذ تب ٚيژگی
58
Farsiplanet.com
ِذت صِبْ ِٛسدpollTime فٛق فؼبي گشدد . شمچٕني تٛعظ خقٍت
ِؾخـ ِی گشدد . ٘شpoll ٔظش ( ثش زغت ِيٍی ثبٔيٗ ) ثني ٘ش
أذاصٖ ِمذاس خقٍت فٛق ثيؾرت ثبؽذ ، تغيريات ثب تبخري
ً> فبيsqlCacheDepencydatabases
...
86
Farsiplanet.com
caching حنِٕ كار طيظتى آگاِ طاسی
اعتفبدٖ اص اص اذمبَ ِشازً اؽبسٖ ؽذٖ ثغرت الصَ ثشای پظ
آِبدٖ ِی ؽٛد. ثشای آؽٕبئی ثبcaching عيغتُ آگبٖ عبصی
رمٖٛ ػٍّىشد عيغتُ فٛق يه سمٛٔٗ ِثبي سا ثب يىذيگش دٔجبي
. ُسمبئي ِی
. ُ سمبئيcache صيش سا query ٗفشك وٕيذ لقذ داسمي ٔتيد
SELECT * FROM
Employees
سا ثبصيبثیEmployees فٛق سوٛسد٘بی ِٛخٛد دس خذٚيquery
ِی سمبيذ . ثشای آگب٘ی اص ايٓ وٗ چٗ صِبٔی يه سوٛسد خذيذ
دسج ، ززف ٚ يب ٚيشايؼ ؽذٖ اعت تب ثشEmployees دس خذٚي
trigger يه اص ، گشدد ِؼترب غري ٖؽذ cache ؽی ْآ اعبط
خذٚي سٚی ثش ٔظش ِٛسد trigger . ؽٛد ِی ٖاعتفبد
اصمبد ِی ؽٛد aspnet_regsql ٚ تٛعظ ثشٔبِٗ وّىی Employees
.
Employees ثش سٚی خذٚيtrigger اصمبد يه
CREATE TRIGGER
dbo.[Employees_AspNet_SqlCacheNotification_Trigger]
ON [Employees]
FOR INSERT, UPDATE, DELETE AS BEGIN
SET NOCOUNT ON
EXEC
dbo.AspNet_SqlCacheUpdateChangeIdStoredProcedure
N'Employees'
87
Farsiplanet.com
END
ٗثذيٓ تشتيت ، پظ اص ثشٚص ٘ش گٛٔٗ تغيري ثش سٚی خذٌٚی و
َٔب ثب stored procedure يه ، گشدد ِی ِبٔيتٛس
changeId ٚ فؼبيAspNet_SqlCacheUpdateChangeIdStoredProcedure
عغش ِشثٛعٗ سا دس خذٚي آگبٖ عبصی تغيريات اضبفٗ ِی سمبيذ
.
AspNet_SqlCacheUpdateChangeIdStoredProcedure
CREATE PROCEDURE
dbo.AspNet_SqlCacheUpdateChangeIdStoredProcedure
@tableName NVARCHAR(450)
AS
BEGIN
UPDATE
dbo.AspNet_SqlCacheTablesForChangeNotification WITH
(ROWLOCK)
SET changeId = changeId + 1
WHERE tableName = @tableName
END
GO
٘ش ثشای AspNet_SqlCacheTablesForChangeNotification خذٚي دس
خذٌٚی وٗ لقذ ِبٔيتٛسيٕگ آْ سا داسمي يه سوٛسد اصمبد ِی
گشدد. پظ اص ثشٚص تغيري دس خذٚي ( ٔظري دسج يه سوٛسد خذيذ
ASP. NET . اضبفٗ ِی گشددchangeId ْٛ) ، يه ٚازذ ثٗ عت
ساchangeId ٗثٗ فٛست دٚسٖ ای ايٓ خذٚي ٚ ِمبديش ِشثٛط ث
ثشسعی ٚ دس فٛستی وٗ ِمذاس فيٍذ فٛق تغيري سمبيذ ، اص
. گشدد ِی ٖآگب ٔظش ِٛسد خذٚي دس تغيريات ثشٚص
SQL دسcaching سٚػ فٛق يىی اص حمذٚديت ٘بی غريِؼتربعبصی
سا ٔؾبْ ِی د٘ذ : ٘ش ٔٛع تغيري ثشSQL Sever 7 ٚ 2111 Server
88
Farsiplanet.com
سٚی خذٚي ثبػث غريِؼترب ؽذْ ٘شگٛٔٗ queryثش سٚی خذٚي ِی
گشدد . ثٗ ػٕٛاْ سمٛٔٗ فشك وٕيذ وٗ اص queryصيش اعتفبدٖ
وشدٖ ثبؽيُ :
SELECT * FROM Employees WHERE
'1City='City
پظ اص اخشای queryفٛق ، سوٛسد وبسوٕبٔی وٗ فيٍذ ؽٙش
آٔبْ ِؼبدي 1 cityثبؽذ ، ِ cacheی گشدد . دس چٕني ٚضؼيتی
اگش سوٛسد يىی اص وبسوٕبْ وٗ فيٍذ cityآْ ِؼبدي 1city
ٔجبؽذ تغيري يبثذ ( سوٛسد ايٓ ٔٛع وبسوٕبْ لجال" cache
عيغتُ آگبٖ عبصی cachingاعالػبت ِشثٛط ثٗ ٔؾذٖ اعت ) ،
غريِؼتربعبصی دادٖ cacheؽذٖ سا اسعبي ِی سمبيذ( غريِؼترب ؽذْ
دادٖ ِٛخٛد دس cacheوٗ دس ػًّ ٘يچىذاَ اص سوٛسد٘بی آْ
تغيري ٔىشدٖ أذ ) . Employees دس خذٚي
تؾخيـ ٚ پيگريی ايٓ وٗ وذاَ تغيري ِی تٛأذ صِيٕٗ غريِؼترب
اذمبَ ِغتٍضَ سمبيذ فشاُ٘ سا ؽذٖ cache دادٖ يه عبصی
ػٍّيبت عٕگيٕی تٛعظ 0002 SQL Serverاعت ( ايٓ وبس دس SQL
اِىبْ پزيش اعت ) . 5002 Server
SQL Server ؽىً 0 ، رمٖٛ وبس عيغتُ غريِؼترب عبصی cacheدس
0002 سا ٔؾبْ ِی د٘ذ .
98
Farsiplanet.com
SQL ِبٔيتٛسيٕگ يه خذٚي ثٗ ِٕظٛس ثشسعی اذمبَ تغيريات دس ؽىً 0 :
0002 Server
اداِٗ caching دس خبؼ دٚاصدُ٘ حبث خٛد سا ثش سٚی data
دادٖ ٚ ثب رمٖٛ اصمبد cache dependencyدس يه ثبٔه اعالػبتی
سمٛٔٗ آؽٕب خٛا٘يُ ؽذ.
(خبغ 0.2 ASP.NET در ٔب ْای بزَايّ كارآئی افشايغ
دٔاسدْى)
آٔچٗ تبوْٕٛ گفتٗ ؽذٖ اعت :
: اؽبسٖ ثٗ جمّٛػٗ ای اص ٔىبت وٗ ٚ دَٚ خبؼ ٘بی اٚي
سػبيت آهنب دس صِبْ عشازی ِی تٛأذ صِيٕٗ پيبدٖ عبصی
يه ثشٔبِٗ ٚة وبسآ سا فشاُ٘ سمبيذ .
: ِؼشفی ثشخی اثضاس٘ب ثشای تغت ثشٔبِٗ ٘بی خبؼ عَٛ
ٚة
خبؼ چٙبسَ : ِفب٘يُ اٌٚيٗ ، cachingسٚػ ٘بی cachingدس
، ASP.NETرمٖٛ اعتفبدٖ اص output caching
Query string ٚ Caching خبؼ پٕدُ :
09
Farsiplanet.com
خبؼ ؽؾُ : Custom Caching Control
خبؼ ٘فتُ : cachingدادٖ ٚ رمٖٛ اعتفبدٖ اص ؽی cache
خبؼ ٘ؾتُ : ثشسعی يه ِثبي خٙت اصمبد cachingثب لبثٍيت
ِؾب٘ذٖ چٕذيٓ viewاص دادٖ
خبؼ هنُ : وٕرتي ٘بی ِٕجغ دادٖ ٚ caching
ثشسعی cachingثب ٚاثغتگی ()Dependency خبؼ دُ٘ :
SQL Server خبؼ يبصدُ٘ : عيغتُ آگبٖ عبصی cachingدس
0002 ٚ 7 ٚ SQL Serverرمٖٛ وبس آْ
اداِٗ دادٖ ٚ caching دس ايٓ خبؼ حبث خٛد سا ثش سٚی data
Northwind ثب رمٖٛ اصمبد cache dependencyدس ثبٔه اعالػبتی
آؽٕب خٛا٘يُ ؽذ.
اجياد cache dependency
ثب رمٖٛ پيىشثٕذی يه ثبٔه اعالػبتی ثشای دس خبؼ يبصدُ٘
محبيت اص عيغتُ آگبٖ عبصی SQL Serverآؽٕب ؽذمي .پظ اص
ِی تٛاْ اص آْ دس ثشٔبِٗ ٘بی ٚة فشاُ٘ ؽذْ صيشعبخت الصَ
اعتفبدٖ سمٛد . ثب اعتفبدٖ اص يىی اص سٚػ ٘بی صيش
ثشای data cachingاص caching dataاس طزيق بزَايّ :
SqlCacheDependency عشيك وذ الصَ اعت وٗ يه ؽی خذيذ
ثٗ Cache.Insert اصمبد ٚ آْ سا ثب اعتفبدٖ اص ِتذ
. ) file dependency ِؾبثٗ ( سمٛد اضبفٗ cache
ِی ثبيغت دٚ SqlCacheDependency ؽی constructor دس
سؽتٗ سا ِؾخـ وشد . اٌٚني سؽتٗ ٔبَ ثبٔه اعالػبتی (
فبيً sqlCacheDependency خبؼ دس add ػٕقش تٛعظ
ٚ دِٚني سؽتٗ ، ٔبَ خذٌٚی ِ web.configؾخـ ؽذٖ اعت )
19
Farsiplanet.com
داسمي. سا آْ تغيريات ِبٔيتٛسيٕگ لقذ وٗ اعت
ثبٔه دس اٌٚني ِشزٍٗ يه ٚاثغتگی ثشای خذٚي Employees
اعالػبتی Northwindاصمبد ٚ دس ِشزٍٗ ثؼذ آيتُ ِٛسد
ٔظش سا ثٗ cacheاضبفٗ ِی سمبئيُ . زضٛس آيتُ فٛق
اعت . ِؾشٚط ثٗ ػذَ ثشٚص تغيريات دس خذٚي Employees
دس فٛست ثشٚص تغيريات دس خذٚي فٛق ، اػتجبس دادٖ
ٚ اص cacheخبسج ِی گشدد . cacheؽذٖ ثٗ اشببَ سعيذٖ
وذ صيش رمٖٛ اذمبَ ايٓ وبس سا ٔؾبْ ِی د٘ذ .
Dim empDependency As New
,"SqlCacheDependency("Northwind )""Employees
,"Cache.Insert("Employees ,dsEmployees
)empDependency
خقٍت وٗ اعت الصَ ِٕظٛس ثذيٓ : caching output
SqlCacheDependencyثٗ دايشوتيٛ ِ OutputCacheؼشفی ؽٛد
. ِمذاس خقٍت فٛق ؽبًِ ٔبَ ثبٔه اعالػبتی ٚاثغتٗ ٚ
خذٚي ِٛسد ٔظش اعت وٗ تٛعظ يه colonاص يىذيگش خذا
. أذ ؽذٖ
وذ صيش رمٖٛ اذمبَ ػٍّيبت فٛق سا ٔؾبْ ِی د٘ذ .
@%% "SqlDependency="Northwind:Employees" VaryByParam="none
يك كُرتل يُبغ دادِ: اص سٚػ فٛق ِی تٛاْ ثٗ شمشاٖ
اعتفبدٖ وشد وٕرتي ٘بی ObjectDataSource ٚ SqlDataSource
. وذ صيش رمٖٛ اذمبَ ايٓ وبس سا ٔؾبْ ِی د٘ذ .
29
Farsiplanet.com
/ ... "SqlCacheDependency="Northwind:Employees
كاربزدی يثال يك بزرطی
دس ايٓ ِثبي پظ اص فؼبي وشدْ عيغتُ آگبٖ عبصی cachingثش
، يه دادٖ Northwind ثبٔه اعالػبتی سٚی خذٚي Employees
فشضی دس cacheرخريٖ ِی گشدد . دس فٛست ثشٚص ٘ش گٛٔٗ تغيري
دس خذٚي ، Employeesاػتجبس دادٖ cacheؽذٖ ثب تٛخٗ ثٗ
ػٕقش pollTime خقٍت تٛعظ ؽذٖ تؼشيف صِبْ ِذت
فبيً web.configثٗ اشببَ خٛا٘ذ sqlCacheDepencyخٛد دس
سعيذ .
ثذيٓ ِٕظٛس ػٍّيبت ِٛسد ٔيبص خٙت پيبدٖ عبصی سا دس دٚ
. سمبئيُ ِی دٔجبي خمتٍف فبص
فاس أل : اجياد سيزطاخت السو بزای اطتفادِ اس طيظتى آگاِ
caching طاسی
دس ايٓ ِثبي ثشای فؼبي وشدْ عيغتُ آگبٖ عبصی cachingثش
سٚی ثبٔه اعالػبتی ٚ Northwindسصمغرت وشدْ خذٚي Employeesثٗ
ِٕظٛس محبيت اص عيغتُ آگبٖ عبصی cachingتٛعظ ثشٔبِٗ خظ
دعتٛسی aspnet_regsql.exeاص عٛئيچ - Cاعتفبدٖ ؽذٖ اعت تب
دس ِمبثً ِؾخـ وشدْ ٔبَ وبسثش ، سِض ػجٛس ٚ ٔبَ عشٚيظ
. گشدد اعتفبدٖ Connection string يه اص دٕ٘ذٖ
يزحهّ أل : فؼبي وشدْ عيغتُ آگبٖ عبصی cachingثش سٚی
دعتٛسی خظ ثشٔبِٗ وّه ثٗ Northwind اعالػبتی ثبٔه
aspnet_regsql.exe
39
Farsiplanet.com
C:\WINDOWS\Microsoft.
NET\Framework\V2.0.50727>aspnet_regsql -ed
-C "Data Source=SRCOSERVER\SQLEXPRESS;Initial
Catalog=NORTHWND;Integrated Security=True"
Enabling the database for SQL cache dependency.
....
Finished.
َپظ اص اخشای دعتٛس فٛق ، يه خذٚي خذيذ ثب ٔب
Northwind ثٗ ثبٔه اعالػبتیSqlCacheTablesForChangeNotification
ْٛعت ٗع داسای فٛق خذٚي .گشدد ِی ٗاضبف
اص آْ ثشای ٚ اعتchangeId ٚ tableName ، notificationCreated
. پيگريی اذمبَ تغيريات اعتفبدٖ ِی گشدد
سا پظNorthwind ؽىً 0 ِبزقً تغيريات ثش سٚی ثبٔه اعالػبتی
. اص اخشای دعتٛس فٛق ٔؾبْ ِی د٘ذ
پظ اص اخشای Northwind ؽىً 0 : ِبزقً تغيريات ثش سٚی ثبٔه اعالػبتی
aspnet_reqsql دعتٛس
وٗ ٔيبصِٕذ محبيتEmployees يزحهّ دٔو : سصمغرت وشدْ خذٚي
. اعتcaching اص عيغتُ آگبٖ عبصی
94
Farsiplanet.com
C:\WINDOWS\Microsoft.
NET\Framework\V2.0.50727>aspnet_regsql -et
-C "Data Source=SRCOSERVER\SQLEXPRESS;Initial
Catalog=NORTHWND;Integrated Security=True"
-t Employees
Enabling the table for SQL cache dependency.
.
Finished.
stored ٚ caching آگبٖ عبصیtrigger ، پظ اص اخشای دعتٛس فٛق
. اصمبد ِی گشددEmployees ثشای خذٚي ِٛسد ٔيبصprocedure
خذٚي فٛق پظ اص اخشای ِبزقً تغيريات اصمبد ؽذٖ ثش سٚی
ٖ دس ؽىً ٘بی 0 ٚ 2 ٔؾبْ دادٖ ؽذaspnet_regsql.exe دعتٛس
. اعت
پظ اص اخشای دعتٛس Employees خذٚي ثش سٚیtrigger : اصمبد 2 ًؽى
aspnet_reqsql
Employees ِٛسد ٔيبص دس استجبط ثب خذٚي stored procedure : اصمبد 0 ًؽى
aspnet_reqsql پظ اص اخشای دعتٛس
95
Farsiplanet.com
web.config ً اص عشيك فبيpolling ْفؼبي وشد : يزحهّ طٕو
web.config ً اص عشيك فبيpolling ْفؼبي وشد
...
فاس دٔو : اطتفادِ اس سيزطاخت اجياد ػذِ طيظتى آگاِ طاسی
ّبزَاي در caching
" ٚ " ثٗ ٔبَ " تغيري خذٚيbutton ٚدس ايٓ ثشٔبِٗ اص د
ؽذٖ " اعتفبدٖ ؽذٖ اعت . ثب اعتفبدٖ اصcache ُثشسعی آيت
ؽذٖ " ، زضٛس آيتُ ِٛسد ٔظش دسcache ُدوّٗ "ثشسعی آيت
. ثشسعی ٚ پيبَ ِٕبعت دس خشٚخی سمبيؼ دادٖ ِی ؽٛدcache
يىی اص ، " دس فٛست وٍيه ثش سٚی دوّٗ "تغيري خذٚي
96
Farsiplanet.com
Northwind ثبٔه اعالػبتی Employees سوٛس٘بی ِٛخٛد دس خذٚي
ٗ ؽذٖ اص زبفظcache ٖتغيري يبفتٗ ٚ ذببٔٗ خبسج ؽذْ داد
. گشدد ِی اصمبد
. وذ ثشٔبِٗ فٛق دس خذٚي صيش ٔؾبْ دادٖ ؽذٖ اعت
NORTHWND دس ثبٔه اعالػبتیcache dependency اصمبد
Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles
Me.Load
If Not Me.IsPostBack Then
"ٗاصمبد آيتُ ٚاثغت lblInfo.Text &= "
Cache.Remove("CachedItem")
' اصمبد يه ٚاثغتگی ثشای خذٚيEmployees
Dim dependency As New SqlCacheDependency("Northwind", "Employees")
Dim dt As DataTable = GetEmployeeTable()
cache"ٗاضبفٗ وشدْ آيتُ ِٛسد ٔظش ث lblInfo.Text &= "
Cache.Insert("CachedItem", dt, dependency)
End If
End Sub
'
=====================================================
============
Private connectionString As String =_
WebConfigurationManager.ConnectionStrings("NORTHWNDConnectionString").Connectio
nString
Function GetEmployeeTable() As DataTable
97
Farsiplanet.com
Dim con As New SqlConnection(connectionString)
Dim sql As String = "SELECT * FROM Employees"
Dim da As New SqlDataAdapter(sql, con)
Dim ds As New DataSet()
da.Fill(ds, "Employees")
Return ds.Tables(0)
End Function
'
=====================================================
=============
Sub cmdGetItem_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles
cmdGetItem.Click
If Cache("CachedItem") Is Nothing Then
" ِٛخٛد سمی ثبؽذcache آيتُ ِٛسد ٔظش دسlblInfo.Text &= "
Else
" ِٛخٛد اعتcache آيتُ ِٛسد ٔظش شمچٕبْ دسlblInfo.Text &= "
End If
End Sub
'
=====================================================
============
Sub cmdModify_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles
cmdModify.Click
Dim con As New SqlConnection(connectionString)
'ذبٕگبَ عبصی ثبٔه اعالػبتی
Dim sql As String = "UPDATE Employees SET LastName='sakha ravesh' WHERE
LastName='srco'"
Dim cmd As New SqlCommand(sql, con)
Try
con.Open()
cmd.ExecuteNonQuery()
Finally
con.Close()
98
Farsiplanet.com
End Try
ِٕتظشpolling ْ ذبٕگبَ عبصی ثبٔه ثٗ شببَ سعيذ ، تب اشببَ صِبlblInfo.Text &= "
"دببٔيذ
End Sub
'
=====================================================
============
Untitled Page
تغيري
. خشٚخی ِثبي فٛق دس ؽىً 4 ٔؾبْ دادٖ ؽذٖ اعت
99
Farsiplanet.com
0002 SQL Server ؽىً 4 : اصمبد cache dependencyدس
تٕضيحات :
دس صِبْ فشاخٛأی ثشٔبِٗ فٛق اص عشيك سٚتني Page_laod
: ؽٛد ِی اذمبَ صيش ػٍّيبت
ثبٔه Employees اصمبد يه ؽی ٚاثغتٗ ثشای خذٚي -
Northwind اعالػبتی
- دسج datasetزبٚی سوٛسد٘بی ثبصيبثی ؽذٖ اص خذٚي
cache دس Employees
٘بی ِٕبعت دس خشٚخی ثٗ وّه وٕرتي عشٚيظ - سمبيؼ پيبَ
) lblInfo دٕ٘ذٖ ( labelثب ٔبَ
سٚتني ٚ ، cmdGetItem_Clickخٛد آيتُ ِٛسد ٔظش سا دس
Cacheثشسعی ٚ دس فٛستی وٗ ايٓ آيتُ دس ِٛ cacheخٛد
ٔجبؽذ يه پيبَ خبؿ اص عشيك وٕرتي عشٚيظ دٕ٘ذٖ labelدس
خشٚخی سمبيؼ دادٖ ِی ؽٛد . دس فٛست ٚخٛد آيتُ ِٛسد
ٔظش دس ِ ، cacheمذاس آْ اص cacheثبصيبثی ٚ يه پيبَ
خبؿ اص عشيك وٕرتي عشٚيظ دٕ٘ذٖ labelدس خشٚخی سمبيؼ
دادٖ ِی ؽٛد .
001
Farsiplanet.com
خذٚي سٚتني ِ ، cmdModify_Clickغئٌٛيت اصمبد تغيري دس
سا ثشػٙذٖ داسد ثبٔه اعالػبتی Northwind Employees
.
اداِٗ دادٖ caching دس خبؼ عيضدُ٘ حبث خٛد سا ثش سٚی data
آؽٕب ٚ ثب عيغتُ آگبٖ عبصی cachingدس Server 2005 SQL
خٛا٘يُ ؽذ.
(خبغ 0.2 ASP. NET در ٔب ْای بزَايّ كارآئی افشايغ
پاياَی)
آٔچٗ تبوْٕٛ گفتٗ ؽذٖ اعت :
: اؽبسٖ ثٗ جمّٛػٗ ای اص ٔىبت وٗ ٚ دَٚ خبؼ ٘بی اٚي
سػبيت آهنب دس صِبْ عشازی ِی تٛأذ صِيٕٗ پيبدٖ عبصی
يه ثشٔبِٗ ٚة وبسآ سا فشاُ٘ سمبيذ .
: ِؼشفی ثشخی اثضاس٘ب ثشای تغت ثشٔبِٗ ٘بی خبؼ عَٛ
ٚة
خبؼ چٙبسَ : ِفب٘يُ اٌٚيٗ ، cachingسٚػ ٘بی cachingدس
، ASP.NETرمٖٛ اعتفبدٖ اص output caching
Query string ٚ Caching خبؼ پٕدُ :
خبؼ ؽؾُ : Custom Caching Control
خبؼ ٘فتُ : cachingدادٖ ٚ رمٖٛ اعتفبدٖ اص ؽی cache
خبؼ ٘ؾتُ : ثشسعی يه ِثبي خٙت اصمبد cachingثب لبثٍيت
ِؾب٘ذٖ چٕذيٓ viewاص دادٖ
خبؼ هنُ : وٕرتي ٘بی ِٕجغ دادٖ ٚ caching
ثشسعی cachingثب ٚاثغتگی ()Dependency خبؼ دُ٘ :
101
Farsiplanet.com
SQL Server خبؼ يبصدُ٘ : عيغتُ آگبٖ عبصی cachingدس
0002 ٚ 7 ٚ SQL Serverرمٖٛ وبس آْ
خبؼ دٚاصدُ٘ : رمٖٛ اصمبد cache dependencyدس يه ثبٔه
اعالػبتی سمٛٔٗ
اداِٗ دادٖ ٚ caching دس ايٓ خبؼ حبث خٛد سا ثش سٚی data
آؽٕب 5002 Server SQL دس caching عبصی آگبٖ عيغتُ ثب
خٛا٘يُ ؽذ.
SQL در 0002 ٔ SQL Server طيظتى آگاِ طاسی caching
5Server 002
ٚضؼيت دبشاتت 5002 SQL Server عيغتُ آگبٖ عبصی cachingدس
ذبرتی سا ٔغجت ثٗ 002 1SQL Serverپيذا وشدٖ اعت . چشاوٗ
صيشعبخت عيغتُ فٛق اص عشيك يه عيغتُ اسعبي ٚ دسيبفت
دس ثبٔه اعالػبتی تؼجيٗ ؽذٖ پيبَ ِٛعَٛ ثٗ Service Broker
. اعت
SQL يىی اص ٚيژگی ٘بی خذيذ اسائٗ ؽذٖ دس Service Broker
اعت . عيغتُ فٛق ، دس ٚالغ يه فشميٛسن اسعبي 5002 Server
ثب . سمبيذ ِی اسائٗ سا ؽذٖ تٛصيغ پيبَ دسيبفت ٚ
اعتفبدٖ اص ٚيژگی فٛق ِی تٛاْ لبثٍيت ٘بی ِتؼذدی سا ثٗ
ثبٔه اعالػبتی اضبفٗ سمٛد . Service Brokerاص عيغتُ رخريٖ
عبصی فف ( ) FIFOاعتفبدٖ ِی سمبيذ ٚ يه ٌيٕه استجبعی ثني
اسعبي وٕٕذٖ پيبَ ٚ دسيبفت وٕٕذٖ پيبَ اصمبد ِی سمبيذ .
عيغتُ فٛق ِذيشيت فف ٘ب سا ثشػٙذٖ داؽتٗ ٚ ؽبًِ اؽيبء
ِ stored procedureی ثبؽذ ثبٔه اعالػبتی ٔظري خذاٚي ، ٚ view
.
CREATE EVENT دعتٛس اص اعتفبدٖ ثب وٕٕذگبْ پيبدٖ
آِٛصػ دٕ٘ذ وٗ ِ NOTIFICATIONی تٛإٔذ ثٗ 5002 SQL Server
201
Farsiplanet.com
دس فٛست ثشٚص سٚيذاد٘بئی خبؿ اعالػبت الصَ سا ثشای عيغتُ
آگبٖ عبصی cachingاسعبي سمبيذ .
ASP. NETاص يه صاٚيٗ ديگش ثٗ ايٓ ِٛضٛع ٔگبٖ ِی وٕذ .
پظ اص ِؾخـ ؽذْ يه ، queryفٕبٚسی ASP. NETثغٛس اتِٛبتيه
اػالَ ِی سمبيذ وٗ اعالػبت آگبٖ عبصی سا ثٗ 5002 SQL Server
ثشای ٘ش ٔٛع ػٍّيبتی وٗ ِی تٛأذ ثش سٚی ٔتيدٗ query
تبثريگزاس ثبؽذ اسعبي سمبيذ . ٘ش ِشتجٗ وٗ يه ػٍّيبت خبؿ
اذمبَ ؽٛد ، ِ SQL Serverؾخـ ِی سمبيذ وٗ آيب ايٓ ػٍّيبت ِی
تٛأذ يه دعتٛس سصمغرت ؽذٖ سا زبت تبثري لشاس د٘ذ ٚ يب خري ؟
دس فٛستی وٗ ػٍّيبت اذمبَ ؽذٖ ثتٛأذ ثش سٚی يه دعتٛس
سصمغرت ؽذٖ تبثريگزاس ثبؽذ ، SQL Serverيه پيبَ آگبٖ عبصی
. سمبيذ ِی ِتٛلف سا عبصی آگبٖ فشآيٕذ ٚ اسعبي سا
ٔغجت ثٗ SQL عيغتُ آگبٖ عبصی Cachingدس Server 2005 SQL
داسای ِضايبی ِتؼذدی اعت : 0002 Server
. دس آگاِ طاسی بز اطاص جشئيات بيؼرتی اس اطالػات
ِمبثً غريِؼترب عبصی ؽی cacheؽذٖ دس صِبْ ثشٚص تغيريات
دس يه خذٚي ، 5002 SQL Serverفشفب" يه ؽی سا صِبٔی
غريِؼترب ِی وٕذ وٗ ػٍّيبتی ٔظري دسج ، ذبٕگبَ عبصی ٚ
ززف ثش سٚی عغش ِٛسد ٔظش اذمبَ ؽذٖ ثبؽذ .
ػذو ضزٔرت اجناو ػًهياتی خاؽ بزای پيكزبُذی ٔ آيادِ
طاسی طيظتى آگاِ طاسی . ثشای ذبشٖ ثشداسی اص عيغتُ
دس 5002 SQL Serverضشٚستی ثٗ اخشای آگبٖ عبصی caching
ثشٔبِٗ خظ دعتٛسی ٚ aspnet_regsqlيب رخريٖ تٕظيّبت
ٚخٛد ٔذاسد . poolingدس فبيً web.config
301
Farsiplanet.com
SELECT query عيغتُ آگبٖ عبصی فؼبٌيت خٛد سا ثش اعبط يه
ِی وٕذ . دس چٕني ِٛاسدی ، ٚ يب stored procedureآغبص
اعتفبدٖ اص SELECT queryحمذٚديت ٘بی خمتـ ثٗ خٛد سا داؽتٗ
ٚ اص لٛأني صيش تجؼيت ِی سمبيذ :
ثشای اخشای queryثش سٚی يه خذٚي ِی ثبيغت ٔبَ آْ
ِ ] Owner].tableؾخـ گشدد . ثٗ ػٕٛاْ سمٛٔٗ ثٗ فٛست
خذٚي ٔبَ ثبيغت سمی فشفب" ( dbo.Employees
Employeesآٚسدٖ ؽٛد . )
، Conut دس ِٛ queryسد ٔظش سمی ثبيغت اص تٛاثؼی ٔظري
ٚ MIN ، MAXيب AVERAGEاعتفبدٖ گشدد .
سمی تٛاْ ثب اعتفبدٖ اص wildcardشببِی عتْٛ ٘ب سا
) . دس SELECT * FROM Employees أتخبة سمٛد ( ٔظري
ِمبثً ، ِی ثبيغت ٔبَ ٘ش عتْٛ دليمب" ِؾخـ گشدد تب
SQL Serverثتٛأذ تغيريات آهنب سا پيگريی ٚ آٔذعتٗ اص
عتْٛ ٘بئی سا وٗ دس ٔتيدٗ queryتبثريگزاس ٘غتٕذ
تؾخيـ د٘ذ .
ثٗ فٛست صيش اعت . ؽىً فسير اعتفبدٖ اص دعتٛس Select
SELECT EmployeeID, FirstName, LastName, City
FROM dbo.Employees
ِٛاسد فٛق ِّٙرتيٓ لٛأني ِٛخٛد دس ايٓ ساثغٗ ِی ثبؽٕذ ٚ
جمّٛػٗ وبًِ تشی سا ِی تٛاْ ثش سٚی ِ msdnؾب٘ذٖ سمٛد . دس
فٛست ػذَ سػبيت يىی اص لٛأني اؽبسٖ ؽذٖ ثب يه پيبَ خغبء
ِٛاخٗ زمٛا٘يُ ؽذ ٚ دس ػًّ عيغتُ آگبٖ عبصی ٚ cachingظبيف
خٛد سا ثٗ دسعتی اذمبَ زمٛا٘ذ داد . تٛخٗ داؽتٗ ثبؽيذ وٗ
401
Farsiplanet.com
ٚ پيبَ آگبٖ عبصی ثالفبفٍٗ پظ اص سصمغرتوشدْ دعتٛس ، اسعبي
. ؽذٖ غريِؼترب ِی گشددcache ُآيت
caching يقذاردْی أنيّ طزٔيض
SQL دسcaching لجً اص ايٓ وٗ ثتٛاْ اص عيغتُ آگبٖ عبصی
َاعتفبدٖ وشد، ِی ثبيغت ػٍّيبت صيش سا اذمب Server 2005
: داد
ٗ. دس فٛستی و Service Broker SQL Server ٌفؼال كزد
ٖ ثشای ثبٔه اعالػبتی ِٛسد ٔظش فؼبي ٔؾذService Broker
ٖثبؽذ دس صِبْ اخشای يه ثشٔبِٗ ٚة وٗ لقذ اعتفبد
سا SQL Server 2005 دسcaching عيغتُ آگبٖ عبصی اص
: داسد ، ثب پيبَ خغبء صيش ِٛاخٗ خٛا٘يُ ؽذ
Server Error in '/WebSite4' Application.
The SQL Server Service Broker for the
current database is not enabled, and as a
result query notifications are not
supported. Please enable the Service
Broker for this database if you wish to
use notifications.
سا ثشایService Broker ٗثشای زً ِؾىً فٛق وبفی اعت و
ثبٔه اعالػبتی ِٛسد ٔظش فؼبي سمٛد . ثذيٓ ِٕظٛس ِی
: اعتفبدٖ سمٛد SQL Server تٛاْ اص دعتٛس صيش دس
ALTER DATABASE [Northwnd] SET
105
Farsiplanet.com
ENABLE_BROKER ;
GO
پظ اص اخشای دعتٛس فٛق ايٓ ازتّبي ٚخٛد خٛا٘ذ داؽت
وٗ جمذدا" ثب يه پيبَ خغبء ديگش ِٛاخٗ ؽٛمي :
2 Msg 9776, Level 16, State 1, Line
"Cannot enable the Service Broker in database "Northwnd
because the Service Broker
-7548-56GUID in the database (B4201B09-6358-4C
D6F50004A4D9) does not match the one
.)in sys.databases (2527A339-BFB3-45C6-978D-412C4FA557CB
2 Msg 5069, Level 16, State 1, Line
.ALTER DATABASE statement failed
ػٍت ثشٚص ايٓ خغبء ثذيٓ دٌيً اعت وٗ ػٍّيبتی ثش سٚی
) ثذْٚ ثبٔه اعالػبتی ( ثٗ ػٕٛاْ سمٛٔٗ Northwind
دٔجبي سمٛدْ فسير فشآيٕذ٘بی آْ اذمبَ ؽذٖ اعت . ثٗ
. ldfاص ٚ ػٕٛاْ ِثبي خبيگضيٕی فبيً ٘بی . mdf
ثبٔه ٘بی ديگش . تٛخٗ داؽتٗ ثبؽيذ وٗ ِی ثبيغت
ثبٔه copy ٚ move ثشای فسير ای سٚيٗ اص شمٛاسٖ
ٚ attach/detachيب اعالػبتی اعتفبدٖ وشد ( اعتفبدٖ اص
. ) backup/restore
ثب تٛخٗ ثٗ ِٛاسد فٛق سمی تٛاْ ِٛ brokerخٛد سا ثش
سٚی ثبٔه اعالػبتی Northwindفؼبي سمٛد ٚ ِی ثبيغت يه
سمٛٔٗ خذيذ سا ثب اعتفبدٖ اص دعتٛس صيش اصمبد سمٛد :
601
Farsiplanet.com
ALTER DATABASE [Northwnd] SET
NEW_BROKER ;
GO
ِی تٛاْ اصservice broker ْثشای اعّيٕبْ اص فؼبي ؽذ
يه ِمذاس ٗو فٛستی دس .وشد ٖاعتفبد صيش query
ثبٔه اعالػبتی سٚی عشٚيظ ثش ٓاي ، ؽٛد ثشگشدأذ
. فؼبي ؽذٖ اعتNorthwind
select is_broker_enabled from sys.databases where
name = 'Northwnd'
فٛق ِتذ . SqlDependency.Start يتذ فزاخٕاَی
ثش سٚی عشٚيظlistening ِغئٌٛيت ِمذاسد٘ی اٌٚيٗ عشٚيظ
. دٕ٘ذٖ ٚة سا ثشػٙذٖ داسد
Dim connectionString As String = _
WebConfigurationManager.ConnectionStrings("NORTHWNDConnectionString").Co
nnectionString
SqlDependency.Start(connectionString)
فشاخٛأی ِتذ فٛق فشفب" يه ِشتجٗ دس ِذت صِبْ زيبت
ِتذ دس ٗو اعت ذبرت ٚ ؽٛد ِی َاذمب ٚة ِٗثشٔب
تب ؽٛد ٖداد لشاس global.asax ًفبي Application_Start
صِيٕٗ فؼبي ؽذْ اتِٛبتيه آْ فشاُ٘ گشدد . شمچٕني ِی
. اعتفبدٖ سمٛدlistener ثشای تٛلفstop تٛاْ اص ِتذ
cache dependency اجياد
107
Farsiplanet.com
ثٗ يهSQL Server 2005 دسcache dependency ثشای اعتفبدٖ اص
َوٗ فشفب" ؽبًِ ِؾخـ وشدْ ٔب گشاِش ِتفبٚت ٔيبص اعت
ِیServer SQL ، ًخذٚي ٚ ثبٔه اعالػبتی سمی ثبؽذ . دس ِمبث
ثبيغت اص دعتٛس ٚالؼی آگب٘ی يبفتٗ ٚ ٔغجت ثٗ آْ ؽٕبخت
. ثبؽذ ٗداؽت
اص عشيك وذ ، ِی ثبيغت ثبcaching ْدس فٛست فؼبي وشد
ْ سا ثٗ ػٕٛاSqlCommand وٗ يه ؽیconstructor اعتفبدٖ اص
SqlCacheDependency پبساِرت دسيبفت ِی سمبيذ الذاَ ثٗ اصمبد
وشد
.
. وذ صيش رمٖٛ اذمبَ ايٓ وبس سا ٔؾبْ ِی د٘ذ
Dim con As New SqlConnection(connectionString)
Dim query As String ="SELECT EmployeeID, FirstName,
LastName, City FROM dbo.Employees"
Dim cmd As New SqlCommand(query, con)
Dim adapter As New SqlDataAdapter(cmd)
Dim ds As New DataSet()
adapter.Fill(ds, "Employees")
Dim empDependency As New SqlCacheDependency(cmd)
Cache.Insert("Employees", ds, empDependency)
ٚ يب يه وٕرتيOutputCache ٛدس فٛست اعتفبدٖ اص دايشوتي
ِغئٌٛيت سصمغرت وشدْ سا ثش ػٙذٖ ِیASP. NET ، ِٖٕجغ داد
ِمذاس "فشفب ثبيغت ِی ْوٕٕذگب ٖپيبد ٚ گريد
. سا ِؾخـ سمبيٕذCommandNotification
108
Farsiplanet.com
بزرطی يك يثال كاربزدی
ٚ ثشSQL Server 2005 دسdependency cache وذ صيش رمٖٛ اصمبد
سا ٔؾبْ ِی د٘ذ . پظ اص فؼبيNorthwind سٚی ثبٔه اعالػبتی
، يه ٚاثغتگیpage_load ؽذْ ثشٔبِٗ فٛق ٚ اص عشيك سٚتني
ٚ ) Select اصمبد ( ِبزقً اخشای دعتٛسcustomers ثشای خذٚي
ٗٔٛ رخريٖ ِی گشدد . دس فٛست ثشٚص ٘شگcache ِبزقً آْ دس
( ايٓ وبس تٛعظcustomers خذٚيContactName تغيري دس فيٍذ
cache ٖاػتجبس داد ) اذمبَ ِی ؽٛدcmdModify_Click سٚتني
دسcaching ؽذٖ ثغٛس اتِٛبتيه ٚ اص عشيك عيغتُ آگبٖ عبصی
. ثٗ اشببَ ِی سعذ SQL Server 2005
SQL Server 2005 دسcache dependency اصمبد
'=====================================================
==============
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Me.Load
If Not Me.IsPostBack Then
SqlDependency.Start(connectionString)
"ٗاصمبد آيتُ ٚاثغت lblInfo.Text &= "
Cache.Remove("Customers")
Dim dt As DataTable = GetTable()
cache"ٗاضبفٗ وشدْ آيتُ ِٛسد ٔظش ث lblInfo.Text &= "
Cache.Insert("Customers", dt, dependency)
109
Farsiplanet.com
End If
End Sub
'=====================================================
==============
Private dependency As SqlCacheDependency
Private connectionString As String = _
WebConfigurationManager.ConnectionStrings("NORTHWNDConnectionString").Connectio
nString
Private Function GetTable() As DataTable
Dim con As New SqlConnection(connectionString)
Dim sql As String = "SELECT ContactName FROM dbo.Customers"
Dim da As New SqlDataAdapter(sql, con)
' اصمبد يه ٚاثغتگی ثشای خذٚي
dependency = New SqlCacheDependency(da.SelectCommand)
Dim ds As New DataSet()
da.Fill(ds, "Customers")
Return ds.Tables(0)
End Function
'=====================================================
==============
Protected Sub cmdGetItem_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Handles cmdGetItem.Click
If Cache("Customers") Is Nothing Then
" ِٛخٛد سمی ثبؽذcache آيتُ ِٛسد ٔظش دسlblInfo.Text &= "
Else
" ِٛخٛد اعتcache آيتُ ِٛسد ٔظش شمچٕبْ دسlblInfo.Text &= "
End If
End Sub
'=====================================================
==============
Protected Sub cmdModify_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Handles cmdModify.Click
Dim con As New SqlConnection(connectionString)
110
Farsiplanet.com
Dim sql As String = "UPDATE dbo.Customers SET ContactName='Test Contact_Name'
WHERE CustomerID='WOLZA'"
Dim cmd As New SqlCommand(sql, con)
Try
con.Open()
cmd.ExecuteNonQuery()
Finally
con.Close()
End Try
"ذبٕگبَ عبصی ثٗ اشببَ سعيذlblInfo.Text &= "
End Sub
'=====================================================
==============
Untitled Page
تغيري
111
Farsiplanet.com
>