Embed
Email

WORD

Document Sample

Shared by: niusheng11
Categories
Tags
Stats
views:
3
posted:
12/4/2011
language:
Persian
pages:
114
‫‪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‬‬

‫'1‪City='City‬‬



‫پظ اص اخشای ‪ query‬فٛق ، سوٛسد وبسوٕبٔی وٗ فيٍذ ؽٙش‬

‫آٔبْ ِؼبدي 1‪ city‬ثبؽذ ، ‪ِ cache‬ی گشدد . دس چٕني ٚضؼيتی‬

‫اگش سوٛسد يىی اص وبسوٕبْ وٗ فيٍذ ‪ city‬آْ ِؼبدي 1‪city‬‬

‫ٔجبؽذ تغيري يبثذ ( سوٛسد ايٓ ٔٛع وبسوٕبْ لجال" ‪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-56‪GUID 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‬‬





‫>‪‪‪‪




‫خشٚخی ِثبي فٛق دس ؽىً 0 ٔؾبْ دادٖ ؽذٖ اعت .‬









‫002 ‪5SQL Server‬‬ ‫ؽىً 0 : اصمبد ‪ cache dependency‬دس‬





‫‪caching‬‬ ‫طاسی‬ ‫آگاِ‬ ‫طيظتى‬ ‫خصٕؽ‬ ‫در‬ ‫احتًانی‬ ‫يؼكالت‬

‫دس فٛستی وٗ ٘شگض اػتجبس آيتُ ‪ cache‬ؽذٖ ثٗ پبيبْ ٔشعذ ،‬

‫عشٚيظ ‪ polling‬دس ‪ ASP. NET‬يه پيبَ غريِؼتربعبصی سا دسيبفت‬

‫سمبيذ . ايٓ ِؾىً ِی تٛأذ داليً ِتؼذدی داؽتٗ ثبؽذ .‬ ‫سمی‬

‫ثشای ‪ SQL Server‬يىی اص ِتذاٌٚرتيٓ ِؾىالت‬ ‫فؼبي ٔؾذْ ‪CLR‬‬

‫.‬ ‫اعت‬ ‫ساثغٗ‬ ‫ايٓ‬ ‫دس‬ ‫ِٛخٛد‬

‫سٚيٗ ای وٗ پيبَ ٘بی آگبٖ عبصی سا اسعبي ِی سمبيذ يه‬

‫سٚيٗ دات ٔت اعت ٚ ثٗ محبيت آْ ٔيبص داسد . ثشای فؼبي‬

‫وشدْ ‪ِ ، CLR‬ی تٛاْ اص پٕدشٖ خظ دعتٛس ٚيژٚاي اعتٛديٛ‬

‫دات ٔت 5112 اعتفبدٖ وشد ٚ دعتٛس ‪ SqlCmd.exe‬سا تبيپ وشد‬

‫.‬

‫5002 ‪SQL Server‬‬ ‫وذ صيش رمٖٛ فؼبي وشدْ دعتٛس فٛق سا ثشای‬

‫ٔؾبْ ِی د٘ذ :‬ ‫‪Express Edition‬‬

‫211‬

‫‪Farsiplanet.com‬‬





‫‪SqlCmd‬‬ ‫‪-S‬‬

‫‪localhost\SQLEXPRESS‬‬



‫، الصَ ٔيغت‬ ‫دس فٛست اعتفبدٖ اص ٔغخٗ وبًِ 5002 ‪SQL Server‬‬

‫‪ instance name‬اعتفبدٖ ؽٛد ( اعتفبدٖ اص ‪ localhost‬دس‬ ‫اص‬

‫.‬ ‫)‬ ‫‪localhost\SQLEXPRESS‬‬ ‫ِمبثً‬

‫شمچٕني دمىٓ اعت ثب تٛخٗ ثٗ حمً ٔقت ثبٔه اعالػبتی الصَ ثبؽذ‬

‫وٗ ٔبَ عشٚيظ دٕ٘ذٖ تغيري يبثذ . دس دعتٛس لجٍی ، فشك ثش‬

‫ايٓ اعت وٗ ثبٔه اعالػبتی ثش سٚی وبِپيٛتش خبسی ٔقت ؽذٖ‬

‫.‬ ‫اعت‬

‫ثشٔبِٗ وبسثشدی ‪ SqlCmd.exe‬يه پشاِپت دعتٛسی سا اسائٗ ِی‬

‫‪SQL‬‬ ‫دعتٛسات‬ ‫دسج‬ ‫ِٕظٛس‬ ‫ثٗ‬ ‫آْ‬ ‫اص‬ ‫تٛاْ‬ ‫ِی‬ ‫وٗ‬ ‫سمبيذ‬

‫صيش‬ ‫دعتٛسات‬ ‫اص‬ ‫‪CLR‬‬ ‫وشدْ‬ ‫فؼبي‬ ‫ثشای‬ ‫.‬ ‫وشد‬ ‫اعتفبدٖ‬

‫اعتفبدٖ ِی گشدد .‬



‫‪EXEC sp_configure 'show advanced‬‬

‫,'‪options‬‬ ‫'1'‬

‫‪GO‬‬

‫‪RECONFIGURE‬‬

‫‪GO‬‬

‫1 ,'‪EXEC sp_configure 'clr enabled‬‬

‫‪GO‬‬

‫‪RECONFIGURE‬‬



‫ثشٔبِٗ‬ ‫اص‬ ‫تٛاْ‬ ‫ِی‬ ‫‪quit‬‬ ‫دعتٛس‬ ‫تبيپ‬ ‫ثب‬ ‫ٚ‬ ‫اداِٗ‬ ‫دس‬

‫ؽذ.‬ ‫خبسج‬ ‫‪SqlCmd.exe‬‬

‫دس فٛستی وٗ اػتجبس آيتُ ‪ cache‬ؽذٖ ثالفبفٍٗ ثٗ اشببَ ثشعذ‬









‫311‬

‫‪Farsiplanet.com‬‬





‫، ايٓ ازتّبي ٚخٛد داسد وٗ اص لٛأني اؽبسٖ ؽذٖ دس‬

‫استجبط ثب ٔٛؽنت ‪ query‬تجؼيت ٔؾذٖ ثبؽذ .‬



‫طخٍ آخز‬







‫عشازبْ ٚ پيبدٖ وٕٕذگبْ ثشٔبِٗ ٘بی ٚة ثب ثىبسگريی جمّٛػٗ‬

‫ای اص تشفٕذ٘ب ، فٕبٚسی ٘ب ٚ سػبيت ثشخی ٔىبت وٍيذی ِی‬

‫تٛإٔذ ثشٔبِٗ ٘بئی سا ثب وبسآئی ِغٍٛة عشازی ٚ پيبدٖ‬

‫عبصی سمبيٕذ . ثب تٛخٗ ثٗ خبيگبٖ ُِٙ اليٗ دادٖ دس ثشٔبِٗ‬

‫ثش سٚی اليٗ فٛق ثب دلت ثيؾرتی ِتّشوض‬ ‫٘بی ٚة ، ِی ثبيغت‬

‫صِبْ عشازی ٚ پيبدٖ عبصی اذمبَ داد‬ ‫ٚ الذاِبت الصَ سا دس‬

‫.‬







‫پيبدٖ وٕٕذگبْ ثشٔبِٗ ٘بی ٚة ثب ٔٛؽنت چٕذيٓ خظ وذ اضبفٗ‬

‫سا ثغشص‬ ‫ِی تٛإٔذ لبثٍيت سؽذ ٚ وبسآئی ثشٔبِٗ ٘بی خٛد‬

‫چؾّگريی افضايؼ دٕ٘ذ .‬







‫اعتفبدٖ اص اثضاس٘بی تغت ٚ پشٚفبيٍيٕگ زذالً ؽشايظ الصَ‬

‫ثٗ ِٕظٛس ثشسعی لبثٍيت ٘بی يه ثشٔبِٗ ٚة وبسآ سا فشاُ٘‬

‫گشٖ ٘بی‬ ‫ِی سمبيذ تب ثتٛاْ لجً اص ػٍّيبتی ؽذْ ِؾىالت ٚ‬

‫زغبط تبثريگزاس ثش سٚی وبسآئی ثشٔبِٗ سا ؽٕبعبئی ٚ دس‬

‫خٙت سفغ آهنب تالػ وشد .‬









‫411‬



Related docs
Other docs by niusheng11
CIOFF-Groups-Report-2010
Views: 419  |  Downloads: 0
stockmkt
Views: 0  |  Downloads: 0
DIFFERENTIAL FLOAT CONTROL VALVE DIFL
Views: 3  |  Downloads: 0
travelrite_nzd
Views: 0  |  Downloads: 0
Office location checklist
Views: 2  |  Downloads: 0
You can help NNAAMI with
Views: 0  |  Downloads: 0
Carey Road CRD Lands
Views: 11  |  Downloads: 0
By registering with docstoc.com you agree to our
privacy policy

You are almost ready to download!

You are almost ready to download!