|
|
|
|
|
 |
|
|
SAKHA
RAVESH
CO. |
|
ا مروز
◄ |
شنبه |
9 |
مرداد |
1389 |
2010 |
Jul. |
31 |
Saturday |
ToDay
►
|
|
|
صفحه اصلی |
مقالات |
نکته ها |
دايره المعارف
|
خودآموزها |
تازه ها |
خود آزمون ها
|
|
عنوان
|
نويسنده
|
مشاهده
|
تعداد
آراء |
امتياز
|
|
افزايش كارآئی برنامه های وب در ASP.NET 2.0 (بخش هشتم) |
مديريت وب |
5024 |
5 |
5 |
افزايش كارآيی برنامه های وب در 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 خروجی برنامه
فوق را نشان می دهد .

شكل 1 : ذخيره داده
بازيابی شده از بانك اطلاعاتی در cache
و استفاده از آن بر اساس خواسته كاربر
در بخش
نهم بحث خود را بر روی data caching
ادامه خواهيم داد .
|
| |

|
جستجو
|
|
جستجو
|
|
|
|
مقالات
|
|
مشاهده گروه ها
|
|
|
 |
|
تهيه شده در شرکت سخا
روش - 1382 |