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



ساير




 

 

 

SAKHA RAVESH CO.

 ا مروز

 دوشنبه  8  خرداد  1396  2017  May  29   Monday ToDay
صفحه اصلی  مقالات نکته هادايره المعارف خودآموزها | تازه ها خود آزمون ها    
  نسخه قابل چاپ  

    5 4 3 2 1 

 عنوان

 نويسنده

  مشاهده

 تعداد آراء

 امتياز

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

 مديريت وب

8291

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
  • بخش هشتم : بررسی يك مثال جهت ايجاد caching با قابليت مشاهده چندين view از داده
  • بخش نهم : كنترل های منبع داده و caching
  • بخش دهم :  بررسی caching با وابستگی (Dependency)
  • بخش يازدهم : سيستم آگاه سازی caching در SQL Server 2000 و SQL Server 7 و نحوه كار آن

در اين بخش بحث خود را بر روی data  caching  ادامه داده و  با نحوه ايجاد cache dependency در بانك اطلاعاتی  Northwind  آشنا خواهيم شد.  

ايجاد cache dependency
در بخش يازدهم  با نحوه پيكربندی يك بانك اطلاعاتی برای حمايت از سيستم آگاه سازی SQL Server آشنا شديم .پس از فراهم شدن زيرساخت لازم  می توان از آن در برنامه های وب با استفاده از يكی از روش های زير  استفاده نمود . 

  • data caching از طريق برنامه :  برای data caching از طريق كد لازم است كه يك شی جديد   SqlCacheDependency ايجاد و آن را با استفاده از متد  Cache.Insert  به cache اضافه نمود ( مشابه file dependency ) .
    در  constructor  شی  SqlCacheDependency  می بايست دو رشته را مشخص كرد . اولين رشته نام بانك اطلاعاتی ( توسط عنصر <add> در بخش  <sqlCacheDependency> فايل web.config مشخص شده است )  و دومين رشته ، نام جدولی است كه قصد مانيتورينگ تغييرات آن را داريم.
    در اولين مرحله يك وابستگی برای جدول Employees  بانك اطلاعاتی Northwind ايجاد و در مرحله بعد آيتم مورد نظر را به cache اضافه می نمائيم . حضور آيتم فوق مشروط به عدم بروز تغييرات در جدول Employees   است . در صورت بروز تغييرات در جدول فوق ، اعتبار داده cache شده به اتمام رسيده  و از cache خارج می گردد .
    كد زير نحوه انجام اين كار را نشان می دهد .

Dim empDependency As New SqlCacheDependency("Northwind", "Employees")
Cache.Insert("Employees", dsEmployees, empDependency)

  •  output caching : بدين منظور لازم است كه خصلت SqlCacheDependency به دايركتيو OutputCache معرفی شود . مقدار خصلت فوق شامل نام بانك اطلاعاتی وابسته و جدول مورد نظر است كه توسط يك colon از يكديگر جدا شده اند .
    كد زير نحوه انجام عمليات فوق را نشان می دهد .

     <%@ OutputCache Duration="600" SqlDependency="Northwind:Employees" VaryByParam="none" %>

     

  • يك كنترل منبع داده: از روش فوق می توان به همراه كنترل های SqlDataSource و ObjectDataSource  استفاده كرد . كد زير نحوه انجام اين كار را نشان می دهد .
     

     <asp:SqlDataSource EnableCaching="True" SqlCacheDependency="Northwind:Employees" ... />

بررسی‌ يك مثال كاربردی  
در اين مثال پس از فعال كردن سيستم آگاه سازی caching بر روی جدول Employees  بانك اطلاعاتی  Northwind  ، يك داده فرضی در cache ذخيره می گردد . در صورت بروز هر گونه تغيير در جدول Employees ، اعتبار داده cache شده با توجه به مدت زمان تعريف شده توسط خصلت pollTime عنصر  <sqlCacheDepency> موجود در  فايل web.config به اتمام خواهد رسيد . 
بدين منظور عمليات مورد نياز جهت پياده سازی را در دو فاز مختلف دنبال می نمائيم .

فاز اول : ايجاد زيرساخت لازم برای استفاده از سيستم آگاه سازی caching
در اين مثال برای فعال كردن سيستم آگاه سازی caching بر روی بانك اطلاعاتی Northwind و ريجستر كردن جدول Employees به منظور حمايت از سيستم آگاه سازی caching توسط برنامه خط دستوری aspnet_regsql.exe از سوئيچ C - استفاده شده است تا در مقابل مشخص كردن نام كاربر ، رمز عبور و نام سرويس دهنده از يك Connection string استفاده گردد .

مرحله اول
: فعال كردن سيستم آگاه سازی caching بر روی بانك اطلاعاتی  Northwind به كمك برنامه خط دستوری aspnet_regsql.exe

  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.

پس از اجرای دستور فوق ، يك جدول جديد با نام SqlCacheTablesForChangeNotification به بانك اطلاعاتی Northwind اضافه می گردد. جدول فوق دارای سه ستون   notificationCreated ، tableName و changeId است و  از آن برای پيگيری انجام تغييرات استفاده می گردد .
شكل 1 ماحصل تغييرات بر روی بانك اطلاعاتی  Northwind را پس از اجرای دستور فوق نشان می دهد .

ماحصل تغييرات بر روی بانك اطلاعاتی  NORTHWND پس از اجرای دستور aspnet_reqsql
شكل 1 : ماحصل تغييرات بر روی بانك اطلاعاتی  Northwind  پس از اجرای دستور aspnet_reqsql

مرحله دوم : ريجستر كردن جدول Employees كه نيازمند حمايت از سيستم آگاه سازی caching است .

  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.

پس از اجرای دستور فوق ، trigger آگاه سازی caching و stored procedure مورد نياز  برای جدول Employees ايجاد می گردد . ماحصل تغييرات ايجاد شده بر روی  جدول فوق پس از اجرای دستور aspnet_regsql.exe در شكل های 1 و 2 نشان داده شده است . 

 ايجاد trigger بر روی  جدول Employees  پس از اجرای دستور aspnet_reqsql
شكل 2  : ايجاد trigger بر روی  جدول Employees  پس از اجرای دستور aspnet_reqsql

ايجاد stored procedure  مورد نياز در ارتباط با جدول Employees  پس از اجرای دستور aspnet_reqsql

شكل 3  : ايجاد stored procedure  مورد نياز در ارتباط با جدول Employees  پس از اجرای دستور aspnet_reqsql

مرحله سوم :  فعال كردن polling از طريق فايل web.config

فعال كردن polling از طريق فايل web.config

<configuration>
   <connectionStrings>
       <add name="NORTHWNDConnectionString"
            connectionString="Data Source=SRCOSERVER\SQLEXPRESS;
            Initial Catalog=NORTHWND;Integrated Security=True"/>
   </connectionStrings>
 <system.web>
<caching>
  <sqlCacheDependency enabled="true" pollTime="15000" >
    <databases>
         <add name="Northwind" connectionStringName="NORTHWNDConnectionString" />
   </databases>
</sqlCacheDependency>

</caching>
...
</system.web>
</configuration>

فاز دوم : استفاده از زيرساخت ايجاد شده سيستم آگاه سازی caching در برنامه  
در اين برنامه از دو button به نام " تغيير جدول " و " بررسی آيتم cache شده " استفاده شده است . با استفاده از دكمه "بررسی آيتم cache شده " ، حضور آيتم مورد نظر در cache بررسی و پيام مناسب در خروجی نمايش داده می شود . در صورت كليك بر روی دكمه "تغيير جدول " ،  يكی از ركورهای موجود در جدول Employees   بانك اطلاعاتی Northwind تغيير يافته و بهانه خارج شدن داده cache شده از حافظه ايجاد می گردد .
كد برنامه فوق در جدول زير نشان داده شده است .

 ايجاد cache dependency در بانك اطلاعاتی NORTHWND

<%@ 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
Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
 
If Not Me.IsPostBack Then
    lblInfo.Text &= "ايجاد آيتم وابسته<br />"
     Cache.Remove("CachedItem")
  
'  Employees  ايجاد يك وابستگی برای جدول
    
Dim dependency As New SqlCacheDependency("Northwind", "Employees")
    
Dim dt As DataTable = GetEmployeeTable()
     lblInfo.Text &=
"اضافه كردن آيتم مورد نظر به cache<br />"
     Cache.Insert("CachedItem", dt, dependency)
 
End If
 End
Sub
  ' =================================================================
Private connectionString As String =_
         
WebConfigurationManager.ConnectionStrings(
"NORTHWNDConnectionString").ConnectionString
 Function GetEmployeeTable() As DataTable
  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
   lblInfo.Text &= "آيتم مورد نظر در cache موجود نمی باشد<br />"
 
Else
  lblInfo.Text &= "آيتم مورد نظر همچنان در cache موجود است<br />"
 
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()
 End Try
 
lblInfo.Text &= "بهنگام سازی بانك به تمام رسيد ، تا اتمام زمان polling منتظر بمانيد<br />"
End Sub
 ' =================================================================
</
Script>

<html xmlns="http://www.w3.org/1999/xhtml" dir="rtl" >
  <
head id="Head1" runat="server">
 
   <title>Untitled Page</title>
  </
head>
  <
body style="font-family: Tahoma">
    
<form id="form1" runat="server">
      
<div>
          
<asp:Button ID="cmdModify" runat="server" Height="24px"  Text="تغيير جدول"
                             
Width="103px" Font-Names="Tahoma" />
          
<asp:Button ID="cmdGetItem" runat="server" Height="24px"
                              Text="بررسی آيتم cache شده"
                             
Width="180px" Font-Names="Tahoma" /><br /><br />
          
<asp:Label ID="lblInfo" runat="server" BackColor="LightYellow" BorderStyle="Groove"
                           
BorderWidth="2px" Font-Names="Tahoma" Font-Size="X-Small" Height="192px"
                           
Width="536px"></asp:Label
>
       </div>
   
</form>
   </
body>
</
html>

خروجی مثال فوق در شكل 4 نشان داده شده است .

ايجاد cache dependency در  بانك اطلاعاتی
شكل 4 : ايجاد cache dependency در   SQL Server 2000

توضيحات :

  • در زمان فراخوانی برنامه فوق از طريق روتين Page_laod عمليات زير انجام می شود :
    -  ايجاد يك شی وابسته برای جدول  Employees   بانك اطلاعاتی Northwind
    - درج dataset حاوی ركوردهای بازيابی شده از جدول  Employees  در cache
    - نمايش پيام  های مناسب در خروجی به كمك كنترل سرويس دهنده label ( با نام   lblInfo  ) 

  • روتين cmdGetItem_Click ، وجود آيتم مورد نظر را در Cache بررسی و در صورتی كه اين آيتم در cache موجود نباشد يك پيام خاص از طريق كنترل سرويس دهنده label در خروجی نمايش داده می شود . در صورت وجود آيتم مورد نظر در cache ، مقدار آن از cache بازيابی و يك پيام خاص از طريق كنترل سرويس دهنده label در خروجی نمايش داده می شود .

  • روتين cmdModify_Click ، مسئوليت ايجاد تغيير در  جدول Employees   بانك اطلاعاتی Northwind  را برعهده دارد . 

در بخش سيزدهم بحث خود را بر روی data  caching  ادامه داده و با سيستم آگاه سازی caching در SQL Server 2005  آشنا خواهيم شد.



جستجو

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


 

 

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



              

 

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