تبلیغات
آموزشASP.NET - افزایش كارآئی برنامه های وب در ASP.NET 2.0 (بخش هشتم)
 
فردا روشن اسن به
آموزشASP.NET
صفحه نخست         تماس با مدیر         پست الکترونیک        RSS         ATOM
 
 

در این بخش  بحث خود را بر روی data  caching ادامه خواهیم داد .

در بخش هفتم برای آشنائی با نحوه عملكرد شی cache به بررسی یك نمونه مثال كاربردی پرداختیم كه در آن داده مورد نظر  برای مدت زمان خاصی در cache مستقر می گردید . در ادامه و به منظور پاسخ به درخواست سرویس گیرندگان از داده ذخیره شده در cache مشروط به عدم اتمام تاریخ اعتبار آن استفاده می گردید . در صورت اتمام تاریخ مصرف نسخه cache شده ، داده جدید تولید و مجددا" در cache قرار می گرفت . در این مثال صرفا" یك داده ساده در cache قرار می گرفت .
شاید برای شما این سوال مطرح شده باشد كه آیا می توان اطلاعات پیچیده تری نظیر داده بازیابی شده از یك بانك اطلاعاتی را نیز بدین شكل در cache قرار داد تا بتوان از آن برای پاسخ به سایر سرویس گیرندگان استفاده نمود ؟  آیا می توان یك سیستم فیلترینگ را بر اساس داده های  cache شده پیاده سازی نمود بگونه ای كه متناسب با خواسته كاربر بخشی از داده cache شده در اختیار وی قرار داده شود ؟ اجازه دهید با بررسی یك مثال كاربردی به سوالات فوق پاسخ دهیم .  

مثال : ایجاد caching با قابلیت مشاهده چندین view از داده
در این مثال اطلاعات مورد نظر از یك بانك اطلاعاتی ( به عنوان نمونه Northwind )  بازیابی و پس از ذخیره در یك DataSet در یك Gridview نمایش داده می شود .  DataSet در cache ذخیره می گردد تا در آینده و قبل از اتمام تاریخ اعتبار آن بتوان از تمام و یا بخشی از اطلاعات آن متناسب با خواسته كاربر استفاده نمود .
خروجی صفحه وب بر اساس خواسته كاربر  و به صورت پویا ایجاد می گردد . در واقع ، كاربر است كه مشخص می كند در خروجی قصد مشاهده چه نوع اطلاعاتی را دارد . خروجی برنامه فوق در چندین ستون مختلف می تواند نمایش داده شود . كاربر با انتخاب یك و یا چندین ستون نظر خود را خصوص نحوه نمایش خروجی مشخص می نماید .

توضیحات برنامه :

  • DataSet از طریق یك تابع اختصاصی و به صورت زیر ایجاد می گردد .

    ایجاد DataSet به كمك یك تابع اختصاصی

    Function RetrieveData() As DataSet
      Dim connectionString As String = _
            WebConfigurationManager.ConnectionStrings("NORTHWNDConnectionString").ConnectionString
      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

  • در اولین مرتبه ای كه صفحه load می گردد ، لیستی از ستون ها توسط یك كنترل  CheckBoxList با نام chckColumns در خروجی و به منظور دریافت نقطه نظرات كاربر نمایش داده می شود . بدین منظور از كد زیر در روتین page_load استفاده شده است .

    نمایش لیستی از ستون ها توسط یك كنترل CheckBoxList

    chkColumns.DataSource = ds.Tables(0).Columns
    chkColumns.DataMember = "Item"
    chkColumns.DataBind()

  •  Dataset به مدت دو دقیقه كه توسط پارامتر sliding expiration  مشخص شده است در cache قرار می گیرد .  ذخیره Dataset در Cache در زمان ایجاد DataSet و از طریق روتین  GetDataSet و به كمك متد Insert شی cache انجام می شود .

    ذخیره DataSet در cache به مدت 2 دقیقه

    Cache.Insert("DataSet", ds, Nothing, DateTime.MaxValue,TimeSpan.FromMinutes(2))

  • پس از كلیك بر روی دكمه " فیلتر و نمایش اطلاعات " ، در ابتدا سعی می گردد كه DataSet از طریق  cache بازیابی گردد ( استفاده از روتین GetDataSet ) . در صورتی كه صفحه نتواند DataSet را از cache بازیابی نماید ، تابع RetrieveData فراخوانده می شود تا پس از تولید DataSet در ادامه بتوان آن را به cache اضافه نمود .
    برای آگاهی كاربران منبع ارائه اطلاعات نیز در خروجی نمایش داده می شود ( ایجاد و ذخیره اطلاعات در cache و یا بازیابی اطلاعات از cache ) .

    بازیابی DataSet از cache و یا ایجاد و ذخیره مجدد DataSet در cache

    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)
          lblCacheStatus.Text = "بازیابی اطلاعات از cache"
      End If
      Return dsPubs
     End Function

  • برای ارائه یك grid قابل پیكربندی ، كد موجود در روتین cmdApply_Click  در DataTable حركت و تمامی ستون هائی را كه كاربر جهت عدم نمایش در خروجی فیلتر نموده است ، از grid حذف می نماید ( قبل از حذف ستون هائی از DataSet یك نسخه ثانویه از آن ایجاد می گردد ) .
    در این رابطه شاید بتوان از گزینه های متعدد دیگری استفاده نمود ولی استراتژی بكار گرفته شده در مثال فوق بیانگر یك حقیقت مهم در خصوص 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
و استفاده از آن بر اساس خواسته كاربر قبل از اتمام تاریخ اعتبار آن

<%@ Page Language="VB" Culture="fa-IR" UICulture="fa-IR" %>
<%@ import Namespace="system.Data" %>
<%@ import Namespace="system.Data.SqlClient" %>
<%@ Import Namespace="System.Web.Configuration" %>

<script runat="server">

 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))
      lblCacheStatus.Text = "ایجاد اطلاعات و ذخیره آنها در cache"
   Else
     dsPubs = CType(Cache("Titles"), DataSet)
      lblCacheStatus.Text = "بازیابی اطلاعات از cache"
  End If
  Return dsPubs
 End Function

'=======================================================================
 Function RetrieveData() As DataSet
  Dim connectionString As String = _
        WebConfigurationManager.ConnectionStrings("NORTHWNDConnectionString").ConnectionString
  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
</script>

'==============================================================
<html xmlns="http://www.w3.org/1999/xhtml" dir="rtl" >
  <head runat="server">
    <title>Untitled Page</title>
  </head>
  <body style="font-family: Tahoma">
   <form id="form1" runat="server">
    <div id="DIV1">
      <asp:label id="Label1" runat="server">ستون هائی را كه قصد نمایش آنها در خروجی را ندارید ، انتخاب نمائید :
      </asp:label>
      <asp:checkboxlist id="chkColumns" runat="server" RepeatColumns="2"></asp:checkboxlist><br />
      <asp:button id="cmdApply" runat="server" Width="144px" Text="فیلتر و نمایش اطلاعات"
              Font-Names="Tahoma" ></asp:button><br />
      <asp:Label ID="lblCacheStatus" runat="server">Hide Columns:</asp:Label>
      <hr />
      <asp:gridview id="gridPubs" runat="server" Width="384px" Height="120px"
             BorderColor="#CC9966" BorderStyle="None" 
             BorderWidth="1px" BackColor="White" CellPadding="4"
            Font-Size="X-Small" Font-Names="Verdana" EnableViewState="False">
     <RowStyle ForeColor="#330099" BackColor="White" HorizontalAlign="Left"></RowStyle>
     <HeaderStyle Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"></HeaderStyle>
    </asp:gridview>
   </div>
  </form>
 </body>
</html>

شكل 1 خروجی برنامه فوق را نشان می دهد .

ذخیره داده بازیابی شده از بانك اطلاعاتی در cache

شكل 1 : ذخیره داده بازیابی شده از بانك اطلاعاتی در cache
و استفاده از آن بر اساس خواسته كاربر

در بخش نهم بحث خود را بر روی data  caching  ادامه خواهیم داد .





نوع مطلب :
برچسب ها :
لینک های مرتبط :


دوشنبه 27 شهریور 1396 06:32 ب.ظ
Thanks for sharing your thoughts about افزایش.
Regards
سه شنبه 14 شهریور 1396 06:08 ق.ظ
Cool blog! Is your theme custom made or did you
download it from somewhere? A theme like yours with a few simple adjustements would really make my blog stand out.
Please let me know where you got your design. Thanks a lot
چهارشنبه 1 شهریور 1396 01:31 ب.ظ
This website was... how do I say it? Relevant!!
Finally I've found something that helped me. Thank you!
پنجشنبه 24 فروردین 1396 05:50 ب.ظ
This article is actually a fastidious one it assists new internet visitors, who are
wishing for blogging.
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر


درباره وبلاگ

سلام من آرش کاکاوند دانشجوی رشته کامپیوتر هستم و ورود شما رابه دنیای aspخوش امدمیگم.حتما نظر بدین تا من کارم رو بهتر ادامه بدم

مدیر وبلاگ : ارش کاکاوند
مطالب اخیر
نویسندگان
صفحات جانبی
نظرسنجی
شما کدام یک از برنامه های زیر را برای طراحی وب انتخاب می کنید؟








جستجو

آمار وبلاگ
کل بازدید :
بازدید امروز :
بازدید دیروز :
بازدید این ماه :
بازدید ماه قبل :
تعداد نویسندگان :
تعداد کل پست ها :
آخرین بازدید :
آخرین بروز رسانی :