大家都知道酒酿蛋是非常传统的美胸食品产后丰胸产品,醪糟也叫酒酿,是由糯米或者大米经过酵母发酵而制成的一种风味食品,其产热量高,富含碳水化合物丰胸产品燕窝酒酿蛋、蛋白质、b族维生素、矿物质等,这些都是人体不可缺少的营养成分酒酿蛋丰胸方法。其中酒酿中含的醣化酵素,能促进乳房的二次发育,具有美胸的作用燕窝酒酿蛋丰胸
افزايش كارآئی برنامه های وب در ASP. NET 2.0 (بخش پايانی)
اين مطلب از طريق سايت شرکت سخاروش در اختيار شما گذاشته شده است .

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

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

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

سيستم آگاه سازی caching  در SQL Server 2000 و  SQL Server 2005
سيستم آگاه سازی caching در  SQL Server 2005  وضعيت بمراتب بهتری را نسبت به SQL Server 2000 پيدا كرده است . چراكه زيرساخت سيستم فوق از طريق يك سيستم ارسال و دريافت پيام موسوم به Service Broker  در بانك اطلاعاتی تعبيه شده است .
Service Broker  يكی از ويژگی های جديد ارائه شده در SQL Server 2005  است . سيستم فوق ، در واقع يك فريمورك ارسال و دريافت پيام توزيع شده را ارائه  می نمايد . با استفاده از ويژگی فوق می توان قابليت های متعددی را به بانك اطلاعاتی اضافه نمود . Service Broker از سيستم ذخيره سازی صف ( FIFO ) استفاده می نمايد و يك لينك ارتباطی بين ارسال كننده پيام و دريافت كننده پيام ايجاد می نمايد . سيستم فوق مديريت صف ها را برعهده داشته و شامل اشياء بانك اطلاعاتی نظير جداول ، view و  stored procedure می باشد .
پياده كنندگان  با استفاده از دستور  CREATE EVENT NOTIFICATION می توانند به SQL Server 2005  آموزش دهند كه در صورت بروز رويدادهائی خاص اطلاعات لازم را برای سيستم آگاه سازی caching ارسال نمايد .
ASP. NET از يك زاويه ديگر به اين موضوع نگاه می كند . پس از مشخص شدن يك query ، فناوری ASP. NET بطور اتوماتيك به SQL Server 2005  اعلام می نمايد كه اطلاعات آگاه سازی را برای هر نوع عملياتی كه می تواند بر روی نتيجه query تاثيرگذار باشد ارسال نمايد . هر مرتبه كه يك عمليات خاص انجام شود ، SQL Server مشخص می نمايد كه آيا اين عمليات می تواند يك دستور ريجستر شده را تحت تاثير قرار دهد و يا خير ؟ در صورتی كه عمليات انجام شده بتواند بر روی يك دستور ريجستر شده تاثيرگذار باشد ، SQL Server يك پيام آگاه سازی را ارسال و فرآيند آگاه سازی را متوقف می نمايد .
سيستم آگاه سازی Caching در SQL Server 2005  نسبت به SQL Server 2000  دارای مزايای متعددی است :

 سيستم آگاه سازی فعاليت خود را بر اساس يك  SELECT query و يا stored procedure آغاز  می كند . در چنين مواردی ، استفاده از SELECT query محدوديت های مختص به خود را داشته و از قوانين زير تبعيت می نمايد :

شكل صحيح استفاده از دستور Select  به صورت زير است .

SELECT EmployeeID, FirstName, LastName, City FROM dbo.Employees

موارد فوق مهمترين قوانين موجود در اين رابطه می باشند و  مجموعه كامل تری را می توان بر روی msdn مشاهده نمود . در صورت عدم رعايت يكی از قوانين اشاره شده با يك پيام خطاء مواجه نخواهيم شد و در عمل سيستم آگاه سازی caching وظايف خود را به درستی انجام نخواهد داد . توجه داشته باشيد كه پيام آگاه سازی بلافاصله پس از ريجستركردن دستور ، ارسال و آيتم cache شده غيرمعتبر می گردد .

 مقداردهی اوليه سرويس caching
قبل از اين كه بتوان از سيستم آگاه سازی caching در SQL Server 2005  استفاده كرد، می بايست عمليات زير را انجام داد :

ايجاد cache dependency
برای استفاده از cache dependency در SQL Server 2005 به يك گرامر متفاوت نياز است  كه صرفا" شامل مشخص كردن نام جدول و بانك اطلاعاتی نمی باشد . در مقابل ، SQL Server می بايست از دستور واقعی آگاهی يافته و نسبت به آن شناخت داشته باشد .
در صورت فعال كردن caching از طريق كد ، می بايست با استفاده از constructor كه يك شی SqlCommand را به عنوان پارامتر دريافت می نمايد اقدام به ايجاد 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 را مشخص نمايند .

 <%@ OutputCache Duration="600" SqlDependency="CommandNotification" VaryByParam="none" %>

بررسی‌ يك مثال كاربردی  
 كد زير نحوه ايجاد cache dependency در SQL Server 2005 و بر روی بانك اطلاعاتی Northwind را نشان می دهد . پس از فعال شدن برنامه فوق و از طريق روتين page_load ، يك وابستگی برای جدول customers ايجاد ( ماحصل اجرای دستور Select ) و ماحصل آن در cache ذخيره می گردد . در صورت بروز هرگونه تغيير در فيلد ContactName جدول customers ( اين كار توسط روتين  cmdModify_Click انجام می شود )  اعتبار داده cache شده بطور اتوماتيك و از طريق سيستم آگاه سازی caching در SQL Server 2005  به اتمام می رسد .

 ايجاد cache dependency در SQL Server 2005  

<%@ Page Language="VB" Culture="fa-IR" UICulture="fa-IR" Debug="true"%>
<%
@ import Namespace="system.Data" %>
<%
@ import Namespace="system.Data.SqlClient" %>
<%
@ Import Namespace="System.Web.Configuration" %>
'===================================================================
 <script runat="server">
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 &=
"ايجاد آيتم وابسته<br />"
    Cache.Remove("Customers")
    Dim dt As DataTable = GetTable()
    lblInfo.Text &=
"اضافه كردن آيتم مورد نظر به cache<br />"
 
  Cache.Insert("Customers", dt, dependency)
 End If
End Sub
'===================================================================
Private dependency As
SqlCacheDependency
Private connectionString As String = _
WebConfigurationManager.ConnectionStrings(
"NORTHWNDConnectionString").ConnectionString
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
   lblInfo.Text &= "آيتم مورد نظر در cache موجود نمی باشد<br />"
 
Else
  lblInfo.Text &= "آيتم مورد نظر همچنان در cache موجود است<br />"
 
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)
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 &= " بهنگام سازی به اتمام رسيد <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>

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

 ايجاد cache dependency در   SQL Server 2005
شكل 1 : ايجاد cache dependency در   SQL Server 2005

مشكلات احتمالی در خصوص سيستم آگاه سازی caching 
در صورتی كه هرگز اعتبار آيتم cache شده به پايان نرسد ، سرويس polling در ASP. NET يك پيام غيرمعتبرسازی را دريافت نمی  نمايد . اين مشكل می تواند دلايل متعددی داشته باشد . فعال نشدن CLR  برای SQL Server يكی از متداولترين مشكلات موجود در اين رابطه است .
رويه ای كه پيام های آگاه سازی را ارسال می نمايد يك رويه دات نت است و به حمايت آن نياز دارد . برای فعال كردن CLR ، می توان از پنجره خط دستور ويژوال استوديو دات نت 2005 استفاده كرد و دستور SqlCmd.exe را تايپ كرد .
كد زير نحوه فعال كردن دستور فوق را برای SQL Server 2005 Express Edition  نشان می دهد :

  SqlCmd -S localhost\SQLEXPRESS

در صورت استفاده از نسخه كامل SQL Server 2005  ، لازم نيست از  instance name استفاده شود ( استفاده از localhost در مقابل  localhost\SQLEXPRESS ) .
همچنين ممكن است با توجه به محل نصب بانك اطلاعاتی لازم باشد كه نام سرويس دهنده تغيير يابد . در دستور قبلی ، فرض بر اين است كه بانك اطلاعاتی بر روی كامپيوتر جاری نصب شده است . 
برنامه كاربردی SqlCmd.exe يك پرامپت دستوری را ارائه می نمايد كه می توان از آن به منظور درج دستورات SQL استفاده كرد . برای فعال كردن CLR از دستورات زير استفاده می گردد .

EXEC sp_configure 'show advanced options', '1'
GO
RECONFIGURE
GO
EXEC sp_configure 'clr enabled', 1
GO
RECONFIGURE

در ادامه و با تايپ دستور quit می توان از برنامه SqlCmd.exe خارج شد.
در صورتی كه اعتبار آيتم cache شده بلافاصله به اتمام برسد ، اين احتمال وجود دارد كه از قوانين اشاره شده در ارتباط با نوشتن query تبعيت نشده باشد .

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


استفاده از اين مطلب  با ذکر منبع و اهداف غيرانتفاعی بلامانع است .
http://www.srco.
ir