افزايش كارآئی برنامه های وب در ASP.NET 2.0 New Page 1



ساير




 

 

 

SAKHA RAVESH CO.

 ا مروز

 سه شنبه  28  دی  1395  2017  Jan.  17   Tuesday ToDay
صفحه اصلی  مقالات نکته هادايره المعارف خودآموزها | تازه ها خود آزمون ها    
  نسخه قابل چاپ  

    5 4 3 2 1 

 عنوان

 نويسنده

  مشاهده

 تعداد آراء

 امتياز

 افزايش كارآئی برنامه های وب در ASP.NET 2.0 (بخش هشتم)

 مديريت وب

8481

7

4.4

با توجه به جایگاه داده در عصر حاضر و  لزوم نگاه جامع به این مقوله مهم ، بر آن شدیم تا محوریت فعالیت های خود را بر  روی این موضوع متمرکز نمائیم . از این رو گروه فابک با شعار فناوری اطلاعات برای کسب وکار شکل گرفت و  خدمات خود  را از طریق  سایت www.fabak.ir  به مخاطبان محترم عرضه می نماید

 

افزايش كارآيی برنامه های وب در ASP.NET 2.0

افزايش كارآئی برنامه های وب در ASP.NET 2.0 (بخش هشتم)
آنچه تاكنون گفته شده است :

  • بخش های اول  و دوم  : اشاره به مجموعه ای از نكات كه رعايت آنها در زمان طراحی می تواند زمينه پياده سازی يك برنامه وب كارآ را فراهم نمايد .
  • بخش سوم  : معرفی برخی ابزارها برای تست برنامه های وب
  • بخش چهارم : مفاهيم اوليه caching ، روش های caching در ASP.NET ، نحوه استفاده از output caching
  • بخش پنجم :  Caching و Query string
  • بخش ششم : Custom Caching Control
  • بخش هفتم : caching داده و نحوه استفاده از شی cache

در اين بخش  بحث خود را بر روی 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  ادامه خواهيم داد .



جستجو

مقالات                 
دايره المعارف       
دوره های آموزشی


 

 

مشاهده گروه ها



              

 

 تهيه شده در شرکت سخا روش -  1382