نمایش نتایج 1 تا 13 از 13

نام تاپیک: Cache در Asp.net

  1. #1
    کاربر دائمی آواتار eyes_shut_number1
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    http://blueco.ir
    سن
    39
    پست
    1,090

    Cache در Asp.net

    cache : همون طور که ميدونيد کش کردن يعني اطلاعاتي را به طور موقت در حافظه که عموما حافظه موقت نام ميدن .اين کار باعث ميشه که هزينه هاي همچون مراجه به سرور و باز خواني از آن کم بشه ولي خوب از نظرف صرف حافظه هزينه بر است.
    اکثر ما برنامه نويسها فکر ميکنيم که کش کردن و استفاده از آن الزامي نيست.البتهخ درسته الزامي نيست اما اگر بدونمي 2-3 و در بعضي مواقع تا 10 برابر پرفورمنس رو بالا ميبره.
    البته به شرط درست استفاده کردن.
    به طور کلي کش کردن به دوس دسته تقسيم ميشه.
    Output Caching , Data Caching
    out put : اخرين صفحه اي که رندر شده را براي کلاينت بعدي در کش نگه ميدارد و آن را تحويل کلاينت بعدي که در خواست همان صفحه را دارد ميدهد.
    (منظورم المانهاي html است)
    Data : اطلاعاتي مثل ديتاست را نگه داري ميکند.البته به صورت خودکار درون بر روي صفحات وب اعمال ميشود.تقريبا شبيه application state است
    اما خيلي براي Server Friendly تر ميباشد چون وقتي حجم آن بالا رفت به طور خود به خود آن را خالي مي کند
    fragment cache(Output Cache مربوط به):
    به جاي آنکه html را بر روي تمامي صفحات کش کند آن را براي قسمتي کش مي کند.
    Data source caching(مربوط به Data caching) : کشي است که در داخل datasource control هايي مثل
    sqldatasource,objectdatasource,Xmldatasource
    درست ميشود.از نظر فني شبيه datacaching است اما نياز به به دست گيري صريح آن و نيست
    (not Explicity)
    نکته : شايد asp.net منابع ثابتي مثل عکس را نتواند کش کند اما نگران نباشيد چون IIS به خوبي اين کار را به صورت خود کار انجام مي دهد
    براي کش کردن 2 راه وجود دارد:
    راه اول :
    در رويداد لود صفحه کد زير را وارد کنيد

    lbl1.text=datetime.now.tolongtimestring()

    و حال در صفحه aspxخود اين تگ را اضافه کنيد

    <%@ outputcache duration="20" varyByParam="None" %>


    صفحه را اجرا کنيد.در بار اول ساعت فعلي را ميبينيد.دوباره آن را باز سازي کنيد.شگفت انگيزه نه؟ به مدت 20 ثانيه ساعت اوليه رو نشون ميده!
    حتما متوجه شدين Duration مقدار زماني که Asp.net اين صفحه رو در کش نگه داري ميکنه است

    ادامش باشه برای بعد ببینیم اصلا به درد کسی خورده یا نه
    ممنون از توجهتون

  2. #2
    کاربر دائمی آواتار eyes_shut_number1
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    http://blueco.ir
    سن
    39
    پست
    1,090

    نقل قول: Cache در Asp.net

    اين روش بر روي سايت هايي با حجم بالا نتيجه چشم گيري داره(لوستر بايد چشمگير باشه!)
    اگه شما صفحه اي که شامل نمايش محصولات هست رو 20 ثانيه کش کنيد يعني تعداد عملايت را محدود کرده ايد(حدود 3 فرمان در دقيقه(
    بدون کش به ازاي هر فرمان يک بار بايد به سرور مراجعه شود
    البته اين بدان معني نيست .!(کدوم معني؟)
    اگر سيستم مبع داده را ضعيف ببينه آن را release ميکنه
    با وجود اين خاصيت مي توانيم بدون ترس از کش استفاده کنيم

    در قسمت اول در مورد varybyparam صحبت نکردم.کسي هم نپرسيد!
    ما مقدار آن را برابر None قرار داديم
    اين بدان معناست که شما احتياج به نگهداري يک کپي از صفحه را داريد.
    حالا تصور کنيد ورود به آن صفحه با querystring باشد.
    به نظر شما آيا کش براي يک کاري به اين پويايي کاربرد داره؟
    وقتي که اطلاعات را به کوئري استرينگ وارد شويد.صفحاتي که در کش داريد expire ميشوند.
    براي اين منظور مقدار varybyparam attribute را برابر "*"
    وقتي اطلاعات را مي فرستيم asp.net ابتتدا querystring را امتحان مي کند که آيا با قبلي يکي است و اگر بله آيا داخل کش است يا نه.
    اگه جواب هردو درست باشد صفحه از کش ارسال مي شود در غير اين صورت يک کپي جديد داخل کش گذاشته ميشود.

    modify کردن cache :

    <%@ outpucache duration="30" cacheprofile="pro1" varybyparam="None" %>
    in web config :
    <system.web>
    <caching>
    <outputcachesetting>
    <outputcacheprofile>
    <add name="pro1" duration="60" />


    </outputcacheprofile>
    </outputcachesetting>
    </caching>
    </system.web>


  3. #3
    کاربر دائمی آواتار eyes_shut_number1
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    http://blueco.ir
    سن
    39
    پست
    1,090

    نقل قول: Cache در Asp.net

    نکاتي پيرامون کش :
    the cache object is thread-safe :براي هر بار اضافه کردن کش نيازي به lock&unlock کردن آن نيست
    اگر آبجکتي داشته بتشيم که بيشتر از يک کلاينت به آن دسترسي داشته باشد که ممکن است داده invalid وارد کند.
    items in the cache are removed automaticlly : اگر داده expire شده باشد آنها را رها مي کند.
    the cache object is support dependencies : شما مي توانييد link شي کش را به يک ديتابيس -جدول -فايل.
    اگر اين منبع تغيير تغيير کند شيء کش شما به صورت خودکار نامعتبر و آزاد مي شود.

  4. #4
    کاربر دائمی
    تاریخ عضویت
    آذر 1386
    محل زندگی
    هيج جا بابل نميشه
    پست
    356

    نقل قول: Cache در Asp.net

    دستتون درد نکه بابت مطالب مفیدتون

  5. #5
    کاربر دائمی
    تاریخ عضویت
    آذر 1386
    محل زندگی
    هيج جا بابل نميشه
    پست
    356

    نقل قول: Cache در Asp.net

    یک سوال برام پیش اومده شما از مزایای cache گفتین می خواستم بدونم معایب استفاده از ان جیه؟

  6. #6
    کاربر دائمی آواتار eyes_shut_number1
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    http://blueco.ir
    سن
    39
    پست
    1,090

    نقل قول: Cache در Asp.net

    راستش دوست عزیز عرض کنم به نظر بنده اگه به موقع و به جا ازش استفاده بشه عیبی نداره بلکه عالیه
    درضمن همیشه کش کردن هزینه بره و حافظه رو اشغال میکنه
    ولی ما باید اینو فدا کنیم برای بالا بردن کارایی
    توی صفحه اخبارتون مثلا از این قضیه استفاده کننید تا رضایت بینندگان سایتتون رو ببینید

  7. #7
    کاربر دائمی آواتار eyes_shut_number1
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    http://blueco.ir
    سن
    39
    پست
    1,090

    نقل قول: Cache در Asp.net

    راه دوم :
    اضافه کردن ايتم به کش است به روش زير:



    cache.insert("ItemName",object,dependency,تاري خ انقضا, مدت زمان اعتبار بدون استفاده)

    ItemName:نام ايتم مود نظر براي اضافه کردن به کش است
    Object:مقداري است که به ايتم نسبت داده مي شود
    dependency : بعدا توضيح ميدم
    تاريخ انقضا: مدت زماني که اعتبار دارد
    مدت زمان اعتبار بدون استفاده:مدت زماني که بعد از استفاده نشده از آن وشي آزاد مي شود.
    exp:

    cache.insert("myitem","Farshad",nothing,datetime.m axvalue,timespan.minute(10))


    مقدار فرشاد را داخل متغيير myitem ميريزد و اگر پس از 10 دقيقه اگر استفاده نشود آزاد مي شود.

  8. #8
    کاربر دائمی آواتار eyes_shut_number1
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    http://blueco.ir
    سن
    39
    پست
    1,090

    نقل قول: Cache در Asp.net

    در اين مثال ديتا ستي را پر ميکنيم و آن را کش ميکنيم و در صفحه ديگر اطلاعات آن راباز خواني ميکنيم.
    مثال : پر کردن اطلاعات درون ديتاست-اضافه کردن به کش'
    'In Form 1
    'In Button_Click
    Dim cnn As New sqlconnection("Data Source=.;Initial Catalog=Northwind;Integrated Security=True")
    Dim dap As New SqlDataAdapter(" SELECT * FROM [Alphabetical list of products]", cnn)
    Dim ds As New Data.DataSet
    dap.Fill(ds)
    Cache.Insert("ds", ds)
    Response.Redirect("default2.aspx")
    باز خواني از کش و نمايش'
    'In Form 2
    'In form_Load
    Dim ds As Data.DataSet
    ds = CType(Cache("ds"), Data.DataSet)
    For i As Integer = 0 To ds.Tables(0).Rows.Count - 1
    Response.Write(ds.Tables(0).Rows(i)(1).ToString)
    Next

  9. #9
    کاربر دائمی آواتار eyes_shut_number1
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    http://blueco.ir
    سن
    39
    پست
    1,090

    نقل قول: Cache در Asp.net

    Cache Dependency :در مورد اين موضع گفتم بعدا بحث ميکنم .
    اين مورد به شما اجازه مي دهد که يک Cache Item رو به يک يا چند منبع خاص نسبت دهديد.
    اما اين کار چه فايده اي داره؟
    فرض کنيد يک ديتا ست رو پر کردين از يک جدول
    اما اين جدول شما تغيير کردن
    نفري که ميخواد از صفحه استفاده کنه اطلاعات جديد رئ نميبينه
    اما اگر از cache dependency استفاده کنيد و اون ديتابيس رو بهش نسبت بدين به محض تغير در داخل آن اين ايتم به طور خود کار پاک مي شود.
    کد :

    Dim CD1 as new CacheDependency(server.mappath("1.xml"))
    cache.insert("myitem",ds,CD1)


    Combine Cache Dependency(aggrigate Cache Dependency):
    حالا فرض کنيد بخواين ايتم خودتون رو به چند منبع وابسته کيند به روش زي عمل ميکنيد .
    کد :

    Dim CD1 as new CacheDependency(server.mappath("1.xml"))
    Dim CD2 as new CacheDependency(server.mappath("2.xml"))
    Dim CD() as new CacheDependency={CD1,CD2}
    Dim ACD as new aggrigateCatcheDependency()
    Acd.add(CD)
    cache.insert("myitem",ds,Acd)

  10. #10
    کاربر دائمی آواتار silverfox
    تاریخ عضویت
    دی 1386
    محل زندگی
    تهران
    سن
    33
    پست
    559

    نقل قول: Cache در Asp.net

    چجوری می تونم اطلاعات رو تا موقعی که توی دیتابیس آپدیت نشدن کش کنم و وقتی که آپدیت شدن توی صفحه هم اطلاعات جدید بیاد؟!

  11. #11

    نقل قول: Cache در Asp.net

    چه تفاوتي بين نگهداري اطلاعات توي cach يا نگهداي اونها توي session هست؟ كدوم يكي كارايي بالاتري دارند و فشار كمتري رو به منابه وب سرور وارد مي كنند؟
    من يه سيستم تحت وب دارم كه براي نگهداري داده هاي بزرگم(خيلي بزرگم) مثل يك جدولي كه از sql بازيابي كردم، از session استفاده مي كنم. آيا اين كار اشتباه نيست؟ راهكار بهتر كدومه؟

  12. #12

    نقل قول: Cache در Asp.net

    از کد زیر برای cache در page استفاده می کنم
    <%@ outputcache duration="20" varyByParam="None" %>

    اما برای مدت زمان زیاد مثلا چهار ساعت جواب نمیده
    برای چهار ساعت duration را برابر 14400 قرار میدم
    اما عملا کمتر از 20 دقیقه تو حافظه نگه میداره.

  13. #13
    کاربر دائمی آواتار ali.akhbary
    تاریخ عضویت
    شهریور 1387
    محل زندگی
    سايت برنامه نويس
    سن
    38
    پست
    303

    Arrow چند تا مثال برای Cache در Asp.net


قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •