View Full Version : یکی بیاد طرز ساختن شمارنده را با asp.net2 به ما یاد بده بابا کمک کنید
khz-web1
دوشنبه 04 تیر 1386, 08:52 صبح
سلام دوستان من الان سویم تای÷یکی است که دارم میزنم ولی به جوابم نمی رسم
هر چقدر هم سرچ می زنم جایی این آموزش گیرم نمی یاد
می خوام آموزش کامل ساخت شمارنده با زبان VB در2 asp.net به من یاد بدید
هم کداش رو بزارید هم بگید این کدها چیکار میکنه
با تشکر فراوان
09163014345
azmoodeh
دوشنبه 04 تیر 1386, 10:19 صبح
دوست من
سلام
لطفا بجای ایجاد تاپیک مجدد مطالبتون رو توی همون تاپیک قبلی پیگیری کنید
روش ایجاد شمارنده رو هم بنده همونجا توضیح دادم
الان مجبور شدم تند تند باز واست بنویسم
کد پایین کد فایل Global.asax هست
<%@ Application Language="VB" %>
<script runat="server">
Public sitecounter As Integer
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
sitecounter = 0
Application.Add("counter", sitecounter)
End Sub
Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs on application shutdown
End Sub
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs when an unhandled error occurs
End Sub
Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
sitecounter = Application.Item("Counter")
sitecounter = sitecounter + 1
Application.Remove("Counter")
Application.Add("counter", sitecounter)
End Sub
Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs when a session ends.
' Note: The Session_End event is raised only when the sessionstate mode
' is set to InProc in the Web.config file. If session mode is set to StateServer
' or SQLServer, the event is not raised.
End Sub
</script>
هر جای برنامه ات هم که خواستی استفاده کنی اینجوریه
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim k As Integer
k = Application.Item("Counter")
Label1.Text = Str(k)
End Sub
البته این کد رو از این بهتر هم میشه نوشت ، اما چون هم شما عجله ندارید و هم من Visual Studio دم دستم نیست اینجور نوشتم که مطمئن باشم کار می کنه !!
موفق باشید
khz-web1
دوشنبه 04 تیر 1386, 12:23 عصر
آقایه آزموده واقعا ازت ممنونم خیلی خوب بود ببخشید شما که زحمت کشیدید برای ما اینو ساختید اگه میشه کدش را توضیح بدید که چطوری کار میکنه ممنون آقا
khz-web1
دوشنبه 04 تیر 1386, 12:35 عصر
آقایه آزموده ممنون از کدتون اگه میشه آموزش فارسی این کد هم بدین که چطوری کار میکنه
دوست من
سلام
لطفا بجای ایجاد تاپیک مجدد مطالبتون رو توی همون تاپیک قبلی پیگیری کنید
روش ایجاد شمارنده رو هم بنده همونجا توضیح دادم
الان مجبور شدم تند تند باز واست بنویسم
کد پایین کد فایل Global.asax هست
<%@ Application Language="VB" %>
<script runat="server">
Public sitecounter As Integer
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
sitecounter = 0
Application.Add("counter", sitecounter)
End Sub
Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs on application shutdown
End Sub
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs when an unhandled error occurs
End Sub
Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
sitecounter = Application.Item("Counter")
sitecounter = sitecounter + 1
Application.Remove("Counter")
Application.Add("counter", sitecounter)
End Sub
Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs when a session ends.
' Note: The Session_End event is raised only when the sessionstate mode
' is set to InProc in the Web.config file. If session mode is set to StateServer
' or SQLServer, the event is not raised.
End Sub
</script>
هر جای برنامه ات هم که خواستی استفاده کنی اینجوریه
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim k As Integer
k = Application.Item("Counter")
Label1.Text = Str(k)
End Sub
البته این کد رو از این بهتر هم میشه نوشت ، اما چون هم شما عجله ندارید و هم من Visual Studio دم دستم نیست اینجور نوشتم که مطمئن باشم کار می کنه !!
موفق باشید
__H2__
دوشنبه 04 تیر 1386, 12:57 عصر
سلام
این کد بشدت مشکل دارد!
مسئله چند ریسمانی در آن لحاظ نشده و مثلاً اگر 100 نفر همزمان وارد سایت شوند این کد فقط چند تک شماره افزایش پیدا میکند. (میتوانید با یک شبیه ساز ساده امتحان کنید!!!)
باید ریسمان را با قفل کرد یا از SyncLock استفاده کرد یا کل Appilication را قفل کرد و یا از تابع System.Threading.Interlocked. Increment استفاده کنید.
azmoodeh
دوشنبه 04 تیر 1386, 13:06 عصر
سلام
قطعه کد اول رو دقیقا در فایل global.asax ذخیره کن .( برای ساختن این فایل از منوی add new item گزینه Global Application Class رو انتخاب کنید )
حالا این فایل رو باز کرده و محتویاتش رو پاک کنید و قطعه کد اول رو توش قرار بدید.
برای به دست آوردن تعداد شمارنده هم قطعه کد دوم رو هر جایی که می خواید قرار بدید
Dim k As Integer
k = Application.Item("Counter")
مثلا اگر می خواید هنگام کلیک کردن روی یک Button این مقدار جایی نشون داده بشه یا مثلا هنگام بار گذاری صفحه توی یک Label چاپ بشه و ....
مقدار k از نوع Integer تعداد شمارنده رو نشون می ده ، برای نشون دادنش توی یک Lebel هم باید با تابع Str() تبدیل به string بشه.
برای تست نرم افزار هم این کد رو توی یک صفحه قرار بدید و این صفحه رو توی چند تا صفحه IE باز کنید
موفق باشید
azmoodeh
دوشنبه 04 تیر 1386, 13:10 عصر
سلام
این کد بشدت مشکل دارد!
مسئله چند ریسمانی در آن لحاظ نشده و مثلاً اگر 100 نفر همزمان وارد سایت شوند این کد فقط چند تک شماره افزایش پیدا میکند. (میتوانید با یک شبیه ساز ساده امتحان کنید!!!)
باید ریسمان را با قفل کرد یا از SyncLock استفاده کرد یا کل Appilication را قفل کرد و یا از تابع System.Threading.Interlocked. Increment استفاده کنید.
دوست عزیز خودم هم می دونم که این کد به شدت آماتور است و اول هم گفتم که این کد ساده ترین روش است که تازه بهینه هم نیست. سعی کردم آسون ترین شیوه رو به دوستمون ارایه بدم . چون احساس کردم از این سخت تر ممکنه باعث سردرگمیش بشه.امیدوارم شما بتونید بهشون کمک کنید که این کده مشکل دار بنده رو مفهومی متوجه بشند و بعد قطعه کدی دارای مباحث چند ریسمانی و Performance Consideration و ... بهشون ارایه بدید
__H2__
دوشنبه 04 تیر 1386, 15:41 عصر
سلام
خوب در کل همانطور که کاربر azmoodeh (http://www.barnamenevis.org/forum/member.php?u=16315) هم گفتند این روشها کامل نیست و در اصل باید اطلاعات در بانک ذخیره شود تا از بین هم نرود ولی من اگر بخواهم یک شمارنده ساده قرار دهم کد زیر را ترجیح میدهم.
ذخیره با نام Counter.vb در پوشه Appp_Code
Option Strict On
Option Explicit On
Public Class Counter
Private Shared m_Counter As Integer = 0
Public Shared Sub Increment()
System.Threading.Interlocked.Increment(m_Counter)
End Sub
Public Shared Function GetCounter() As Integer
Return m_Counter
End Function
End Class
و کد زیر در Global.asax در ریشه سایت
<%@ Application Language="VB" %>
<script runat="server">
Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
Counter.Increment()
End Sub
</script>
برای گرفتن عدد شماره جاری هم میتوان از Counter.GetCounter استفاده کرد.
به نظر من هم ساده تر و هم سریعتر و هم قابل اطمینان تر است (گرچه کامل نیست!)
جمیعاً موفق و پیروز باشید.
khz-web1
سه شنبه 05 تیر 1386, 08:34 صبح
آقایون از شما ممنونم
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.