نمایش نتایج: از شماره 1 تا 5 , از مجموع 5

موضوع: آموزش ASP.net

  1. #1
    کاربرسایت Unknown آواتار ها
    تاریخ عضویت
    ۸۶-۰۴-۱۹
    نوشته ها
    4,190
    سپاس ها
    0
    سپاس شده 2 در 2 پست

    آموزش ASP.net

    چگونگی ساخت Setup برای برنامه های NET
    انتقال مقادير بين صفحات يک برنامه
    جایگاه Thread ها در ASP.NET
    استخراج داده از XML در ASP.NET
    XML و خواندن اطلاعات از آن
    جايگاه ASP.NET در مقايسه صفحات ايستا و پويا
    جایگاه Caching در ASP.NET
    نکاتی جهت بهينه سازی برنامه های ASP.NET
    معماری فايل ASP.NET
    انتقال مقادير بين صفحات يک برنامه
    در مورد Codebehind
    در مورد Namespace
    آپلود کردن فايل به سرور در ASP.NET
    يک صفحه ASP.NET ساده
    رويدادهای يک صفحه ASP.NET
    ويژگيهای دات نت
    مروری بر ساختار برنامه های NET
    بررسی CLR

  2. #2
    کاربرسایت Unknown آواتار ها
    تاریخ عضویت
    ۸۶-۰۴-۱۹
    نوشته ها
    4,190
    سپاس ها
    0
    سپاس شده 2 در 2 پست

    پاسخ : آموزش ASP.net

    چگونگی ساخت Setup برای برنامه های NET
    برنامه نويسان حرفه ای معمولاً بعد از توليد برنامه‎ی خود، با استفاده از امکانات موجود در Visual Studio .NET برای آن يک Setup يا اصطلاحاً يک برنامه‎ی نصّاب می سازند. اما اگر برنامه شما جهت گزارشگيری از ابزار Crystal Report برای NET. استفاده کرده باشد، احتمالاً برنامه نصّاب شما به هنگام نصب به مشکلی برخورد خواهد کرد. اين مقاله را بخوانيد تا راه حل اين مشکل را بيابيد.

    احتمالا تاكنون برنامه هايی با NET. نوشته و آن را روی سيستمی كه Visual Studio .NET. روی آن نصب نباشد امتحان كرده ايد. اين كار بدون هيچ مشكلی انجام می شود، كافی است برای برنامه خود Setup درست كنيد و بعد از نصب .NET Framework روی سيستم مورد نظر برنامه خود را نصب و اجرا كنيد.

    اما اگر در برنامه خود گزارشهايی توسط Crystal Report نوشته باشيد حتی در صورت طی مراحل بالا هنگام اجرای برنامه و فراخوانی گزارشهای مربوطه با يك پيغام خطا روبرو خواهيد شد و گزارش مورد نظر شما نشان داده نخواهد شد دليل آن اين است كه نحوه ساخت Setup برای اين گونه برنامه ها كمی متفاوت است.

    مراحل ساخت Setup برای اينگونه برنامه ها به اين شرح ذيل است:

    ابتدا مراحل اوليه ساخت Setup را مانند برنامه های عادی طی كنيد.

    پس از ساخت پروژه Setup در Solution Explorer روی آن كليك راست كرده و از منوی Add گزينه Merge Module را انتخاب كرده و آيتمهای زير را اضافه كنيد:

    Crystal_Database_Access2003.msm
    Crystal_Database_Access2003_enu.msm
    Crystal_regwiz2003.msm

    در Solution Explorer روی گزينه Crystal_regwiz2003.msm كليك راست كرده و Properties را انتخاب كنيد.

    در پنجره Properties گزينه MergeModuleProperties را باز كرده و در قسمت License Key كد مربوطه را وارد كنيد.

    توجه:
    برای بدست آوردن Licence Key گزينه About از منوی Help در Visual Studio .NET را انتخاب كنيد سپس كدی كه در مقابل Crystal Reports for Visual Studio .NET نوشته شده را كپی كرده و در قسمت مربوطه وارد كنيد.

  3. #3
    کاربرسایت Unknown آواتار ها
    تاریخ عضویت
    ۸۶-۰۴-۱۹
    نوشته ها
    4,190
    سپاس ها
    0
    سپاس شده 2 در 2 پست

    پاسخ : آموزش ASP.net

    انتقال مقادير بين صفحات يک برنامه
    در اين مقاله با يک روش جديد و مختص ASP.NET بنام Context جهت تبادل مقادير ميان صفحات يک برنامه آشنا می شويد.

    ASP.NET دارای امکانات خوبی جهت انتقال مقادير و متغيرها ميان صفحات می باشد. خوشبختانه علاوه بر امکان استفاده از روش های قديمی مانند متغيرهای Application ،Session و QueryString، قابليت جديدی نيز به اين مجموعه اضافه شده است که بسيار کارآمد هم می باشد. اين امکان جديد شئ Context می باشد و از اين قابليت می توان در کنار Server.Transfer بخوبی استفاده نمود. استفاده از Context همانند استفاده از Session است:

    Context.Items.Add("NameOfVariable","ValueOfVariabl e");
    Server.Transfer("WebForm2.aspx");

    در صفحه دوم جهت بازيابی مقدار ذخيره شده بصورت زير عمل می کنيم:

    Label1.Text=Context.Items["NameOfVariable"].ToString();

    بنابراين، در صفحه دوم می توانيم مقدار ارسالی را در قالب يک شئ از تايپ object دريافت کنيم که لازم است قبل از استفاده، آن را به تايپ مورد نظر تبديل يا Cast کنيم. اين روش شايد برای تعداد محدودی از مقادير يا متغيرها کارآمد باشد، اما اگر تعداد زيادی از اين متغيرها را بخواهيم به ازای هر کاربر يا Session نگهداری کنيم در اين صورت ممکن است دچار مشکل شويم يا به علت اشکالات تايپی در نام اين نوع متغيرها به خطای منطقی در برنامه برخورد نمائيم. جهت حل اين معضل از روش زير استفاده می کنيم.

    Imports System.Collections
    Public Class StaticContainer
    Private Shared thing As Hashtable
    Public Shared Sub InitThing()
    thing = New Hashtable()
    End Sub
    Public Shared Sub KillThing()
    thing.Clear()
    thing = Nothing
    End Sub
    Public Shared Sub AddContainer(ByVal key As Object)
    thing.Add(key, New ArrayList())
    End Sub
    Public Shared Sub RemoveContainer(ByVal key As Object)
    thing.Remove(key)
    End Sub
    Public Shared Sub AddToContainer(ByVal newname As String, ByVal index As Integer,
    ByVal stuff As String, ByVal key As Object)
    Dim temp As ArrayList = thing.Item(key)
    thing.Remove(key)
    Dim t As New triple()
    t.name = newname
    t.ID = index
    t.data = stuff
    temp.Add(t)
    thing.Add(key, temp)
    End Sub
    Public Shared Function GetEntry(ByVal x As Integer, ByVal key As Object) As triple
    Dim temp As ArrayList = thing.Item(key)
    Dim result As triple
    If temp.Count > x And x >= 0 Then
    result = CType(temp(x), triple)
    End If
    Return result
    End Function
    End Class
    Public Structure triple
    Public name As String
    Public ID As Integer
    Public data As String
    End Structure

    جهت استفاده از کلاس فوق لازم است در فايل Global.asax تغييرات زير را اعمال کنيم:

    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
    ' Fires when the application is started
    StaticContainer.InitThing()
    End Sub
    Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
    ' Fires when the session is started
    Session.Add("key", DateTime.Now.Ticks.ToString("x"))
    StaticContainer.AddContainer(Session.Item("key"))
    End Sub
    Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
    ' Fires when the session ends
    StaticContainer.RemoveContainer(Session.Item("key" ))
    End Sub
    Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)
    ' Fires when the application ends
    StaticContainer.KillThing()
    End Sub

    برای ذخيره شناسه يا ID مربوط Container و کاربر از Session استفاده نموديم. هنگامی که برنامه برای اولين بار اجرا می شود Hashtable مورد نظر ايجاد شده و هنگامی که Session شروع می شود فضای مربوط به نگهداری مقادير به ازای هر کاربر نيز ايجاد می گردد. نحوه استفاده از اين برنامه فوق بصورت زير است:

    StaticContainer.AddToContainer(TextBox1.Text, Integer.Parse(TextBox2.Text),
    TextBox3.Text, Session.Item("key"))

    Dim t As triple = StaticContainer.GetEntry(Integer.Parse(TextBox4.Te xt), Session.Item("key"))
    ListBox1.Items.Add(t.name)
    ListBox1.Items.Add(t.ID.ToString())
    ListBox1.Items.Add(t.data)

    همانگونه که ملاحظه می فرمائيد ديگر نيازی به تبديل به تايپ های مختلف نداشته و در عوض بجای ساختار triple شما هر نوع ساختاری را با هر نوع تعداد متغير را می توانيد تعريف و استفاده نمائيد.

  4. #4
    کاربرسایت Unknown آواتار ها
    تاریخ عضویت
    ۸۶-۰۴-۱۹
    نوشته ها
    4,190
    سپاس ها
    0
    سپاس شده 2 در 2 پست

    پاسخ : آموزش ASP.net

    جایگاه Thread ها در ASP.NET
    در اين مقاله سعی شده است مفهوم Threading و ارتباط آن با ASP.NET و مفهوم Application Domain بيان گردد.

    شايد زمانی که شما با برنامه Visual Studio.NET کار می کنيد با مواردی مواجه شويد که مفهوم آنها برای شما گنگ يا جديد باشد. يکی از اين موارد که بسياری از برنامه نويسان با آن مواجه شده اند همين مبحث Threading می باشد. احتمالا بايد ديده باشيد که در نامکده System، نامکده ديگری با نام Threading موجود است که برای کار با اين مبحث اختصاص يافته است. يا احتمالا وقتی قصد داشتيد که از Help مربوط به VS.NET استفاده نماييد، در مواردی که مربوط به راهنمای کلاسها می باشد، با يک توضيح با عنوان Thread Safety مواجه شده ايد.

    در اين مقاله سعی شده است تا خواننده با مفهوم Thread و مسائل مربوط به آن آشنا شود. در تهيه اين مقاله از مستندات شرکت مايکروسافت و تجربيات نويسنده در اين زمينه استفاده شده است.

    پروسه چيست؟
    قبل از آنکه به بررسی مفهوم Thread پرداخته شود لازم است کمی در مورد پروسه ها (Process) توضيحاتی ارايه گردد. هر برنامه ای که شما اجرا می کنيد، تحت نام يک پروسه به اجرا در می آيد و اين پروسه هست که وظيفه کنترل برنامه های شما را دارد. يکی از مزيت های پروسه ها اين هست که شما را قادر می سازد چندين برنامه را در کنار هم به اجرا در آوريد ( بطور مثال VS.NET و MS Access را در يک زمان اجرا کنيد و در همان لحظه توسط WinAmp به موزيک مورد علاقه خود گوش دهيد!). اساس Windows هم در تمامی نسخه ها بر همين مورد استوار بوده است. برای ديدن پروسه های در حال اجرا با فشردن Ctrl + Shift + Esc (در ويندوزهای 2000 به بالا)، Windows Task Manager را احضار نموده و با انتخاب سربرگ Processes قادر خواهيد بود که آنها را مشاهده نماييد. دو پروسه آشنا را می توان بصورت زير نام برد:

    • پروسه devnev.exe که مجری VS.NET می باشد.
    • پروسه IExplore.exe که مجری IE (مرورگر اينترنت اکسپلورر) می باشد.

    البته تمام پروسه ها نشان دهنده يک برنامه آشکار نيستند. مثلا تمام desktop شما تحت پروسه ای با نام Explorer اجرا می گردد. اگر باور نداريد بر روی اين پروسه کليک راست گرفته و گزينه End Process را انتخاب نماييد تا ببينيد چگونه کل Desktop شما ناپديد می شود!! به هر حال منظور اين است که تمامی برنامه ها و کنترلرهای سيستم عامل تحت پروسه های معينی انجام می شوند.

    بايد خاطر نشان کرد که IIS شما نيز تحت پروسه ای با نام INETinfo.exe اجرا می گردد. اين پروسه نيز بايد دائما در حال اجرا باشد تا بتواند کليه درخواستها برای ديدن صفحات وب را دريافت و آنرا مديريت کند. برای برنامه های ASP.NET هم پروسه ای جدا از پروسه IIS در نظر گرفته شده تا مديريت بهتری برای برنامه های ASP.NET وجود داشته باشد. اين پروسه ASP_wp.exe نام دارد که مخفف ASP Worker Process می باشد. توجه کنيد اين پروسه با اولين درخواست برای يک صفحه وب ASP.NET ايجاد می شود. همچنين ممکن است بنا به دلايلی اين پروسه اصلا اجرا نگردد. خوب علت آن، اين می تواند باشد که (بنا به هر دليلی) قبلا درخواست شده باشد تا برنامه های ASP.NET هم تحت پروسه IIS اجرا گردند (همان پروسه INETinfo.exe). خوب اين فعلا زياد فرقی نمی کند و فقط مهم اين است که بدانيد برنامه های وب شما تحت يکی از دو پروسه ذکر شده اجرا می گردند.

    Thread چيست؟
    اما يک Threadچيست؟ در جواب اين سوال می توان گفت که Threadها منابعی هستند که از طرف سيستم عامل به يک پروسه (برنامه) اختصاص داده می شوند تا از آن برای اجرای محتويات خود استفاده نمايند. به بيانی ديگر شايد بتوان گفت که Threadها يک نوع زير پروسه هستند. برای روشن شدن تعريف فوق به بيان مثالی می پردازيم (پيشنهاد می شود که اين مثال را همزمان انجام دهيد تا درک بيشتری نسبت موضوع پيدا کنيد).

    در ابتدا پنجره مربوط به Processes را در Windows Task Manager نمايان کنيد. سپس از منوی View گزينه Select Columns را انتخاب نماييد. از پنجره به نمايش در آمده گزينه Thread Count را انتخاب نماييد و سپس دکمه OK را فشار دهيد تا به حالت قبل بازگرديد. هم اکنون در پنجره مربوط به Processes يک ستون با نام Threads اضافه شده است. خوب حالا چند پنجره اينترنت اکسپلورر باز نماييد. همانطور که گفته شد، اينترنت اکسپلورر تحت پروسه IExplore.exe به اجرا در می آيد. حال به Processes در Windows Task Manager باز گرديد. مشاهده می کنيد که به ازای هر پنجره باز شده از اين نوع يک پروسه IExplore.exe نيز ايجاد شده است. بنابراين به اين نتيجه می رسيم که پنجره های اينترنت اکسپلورر هر کدام تحت يک پروسه جداگانه مديريت می شوند. هر کدام از اين پروسه ها نيز بنا به نيازشان خود حاوی چند Thread هستند.

    خوب حالا پروسه Explorer.exe را بيابيد. به مقدار ستون Threads آن نگاه کنيد. می بينيد که اين برنامه مثلا شانزده Thread دارد. خوب اين تعداد را به خاطر بسپاريد و سپس سعی نماييد که يک صفحه Windows Explorer را باز نماييد (با کليک راست بر روی Start و انتخاب گزينه Explore). اينبار بر خلاف اينترنت اکسپلورر مشاهده می نماييد که هيچ پروسه جديدی همنام با Explore.exe ايجاد نمی شود! پس اين برنامه چگونه اجرا می گردد؟ مگر نه اينکه هر برنامه بايد تحت يک پروسه خاص اجرا شود، پس چرا اين برنامه تحت هيچ پروسه ای اجرا نمی گردد؟

    يکبار ديگر به مقدار ستون Threads مربوط به پروسه Explore.exe نگاهی بيندازيد. خواهيد ديد که اين مقدار افزايش يافته است (اغلب به اندازه تعداد پنجره های Windows Explorer ای که باز کرده ايد). با سعی مجدد در باز کردن تعداد صفحات بيشتر خواهيد ديد که اين مقدار نيز افزايش می يابد.

    بنابراين می توان نتيجه گرفت که برنامه های Windows Explorer همگی تحت يک پروسه خاص با نام Explorer.exe اجرا می گردند و هر نسخه از آن در يک Thread مجزا قرار می گيرد. در نتيجه می توان گفت Threadها نيز شبيه به پروسه ها هستند و مهم تر آنکه Threadها نيز قابليت اجرا در کنار هم را دارند. بدين ترتيب می توان گفت که می توان برنامه هايی نوشت که خود همزمان چند زيربرنامه مشابه را در آن واحد به اجرا درآورند. مثلا برنامه ای نوشت که در همان لحظه که در حال محاسبه عمليات زمانبر رياضی است، به در خواستهای کاربر نيز پاسخ دهد. اينکار بدين صورت انجام می شود که محاسبه آن عمليات را به يک Thread غير از Thread جاری واگذار نماييم. بدين ترتيب مشاهده می شود که در برنامه ها هم قابليت اجرای همزمان چند عمليات با هم وجود دارد. در ادامه بايد گفت که برنامه ها می توانند تعيين کنند که به چند Thread نياز دارند. اين يک درخواست به سيستم عامل است.

    در ضمن توجه نماييد که يک Thread مختص به يک برنامه نيست. مثلا نمی توان گفت Thread شماره 120 به فلان برنامه تعلق دارد. Thread ها در سطح سيستم عامل آزاد هستند و پس از درخواست به دريافت يک Thread از سوی يک برنامه، توسط سيستم عامل يک Thread آزاد به آن برنامه تعلق می گيرد. پس از آن، تا رها شدن Thread مربوطه، آن Thread متعلق به آن برنامه می باشد و هيچ برنامه ديگری حق استفاده از آنرا ندارد.

    رابطه ميان پروسه ها، Thread ها و ASP.NET
    هم اکنون که مفاهيم Thread و پروسه ها معين گرديد و متوجه شديد که برنامه های وب شما تحت يکی از دو پروسه ASP_wp.exe يا INETinfo.exe اجرا می گردند، به بيان رابطه موجود ميان اين موارد سيستم عاملی با برنامه های ASP.NET می پردازيم. اما قبل از آن لازم است با مفهوم جديد Application Domain که توسط ASP.NET ارايه شده است آشنا گرديد.

    Application Domain چيست؟
    قبل از بوجود آمدن ASP.NET اجرای برنامه های وب بدين صورت بود که همگی برنامه ها تحت يک پروسه خاص اجرا می شدند و هر درخواست برای هر صفحه به يک Thread معين واگذار می شد و پس از اتمام آن، Thread مربوطه برای استفاده های بعدی آزاد می شد. حال اگر در يک وب سرور 1000 سايت قرار داشت، همگی تحت نام يک پروسه به اجرا در می آمدند. در اين ميان اگر يکی از سايت ها با مشکلی مواجه می شد ممکن بود که نياز باشد IIS را Restart کرد تا پروسه از اول اجرا شود و اين بدين معنی بود که تمام سايتها برای مدتی قادر به سرويس دهی نبودند و اين مسلما خوش آيند نمی باشد. بالاخص اينکه با افزايش تعداد سايتها احتمال بروز مشکل بيشتر می شد.

    شايد بگوييد که چرا بايد پروسه IIS را Restart نمود و چرا Thread مربوطه Restart نمی شود؟ در جواب بايد متذکر شد که اگرچه Thread ها شبيه پروسه ها هستند ولی قدرت و محدوده عمل آنها با پروسه ها متفاوت است. مسلما يکسری منابع ميان Thread های مورد استفاده يک برنامه مشترک هستند و بنابراين در صورت بروز مشکل در آن موارد راهی جز Restart کردن پروسه(برنامه) نيست.

    مايکروسافت اين مشکل را متوجه شد و آنرا در محيط جديد خود با مفهوم جديد Application Domain حل نمود. Application Domainها در واقع يک ناحيه کاری برای برنامه می باشند. قبل از هرچيز اينکه Application Domain ها مخصوص ASP.NET هستند و در ديگر انواع برنامه های NET. مفهومی ندارند. Application Domain در واقع محلی است که هر سايت تحت آن اجرا می گردد. Application Domainها مفهوم بسيار مشابه ای با پروسه ها دارند. برای هر Application Domain منابع جداگانه ای در نظر گرفته می شوند. مثلا يک حافظه کاملا جدا از ساير سايت ها. Application Domain ها تحت يک پروسه هستند. حال در صورت بروز يک مشکل برای يک سايت ديگر نيازی نيست که کل پروسه Restart شود.

    در ضمن توجه نماييد که هر Application Domain می تواند چندين Thread را در اختيار بگيرد و بدين صورت نيست که يک تناظر يک به يک بين آنها باشد. در کل می توان مطالب فوق را در يک نمودار قرار داد که در بالاترين سطح پروسه ها هستند، سطح ميانی Application Domain و پايين ترين سطح Thread ها می باشند.هر سطح می تواند چندين مورد از موارد زير سطح را شامل گردد:

    • پروسه ها
    • Application Domains
    • Threads

    حال که روابط فوق مشخص شد، کمی هم به نحوه ارتباط و چگونگی استفاده از Threadها در ASP.NET می پردازيم.
    اول آنکه شما می توانيد معين نماييد که پروسه ASP_wp.exe حداکثر از چند Thread استفاده نمايد. البته تنظيم اين مقدار فقط در فايل Machine.Config ممکن است و اين مقدار در تگ processModel تنظيم می شود. مقدار پيش فرض آن 25 می باشد.

    در ادامه سعی می شود که با ذکر مثالی نحوه چگونگی استفاده از Threadها، با استفاده از Debugger موجود در NET Framework SDK. شرح داده شود.
    در اينجا فرض بر اين است که شما کار با اين Debugger را می دانيد. در غير اينصورت می توانيد با مراجعه به بخش QuickStart از سايت ASP.NET نحوه کار با آنرا بياموزيد.

    ابتدا نياز است که شما اين برنامه را اجرا نماييد. بنابراين:
    • فايل DbgCLR.exe را در کامپيوتر خود يافته و آنرا اجرا کنيد،
    • يک پروژه ASP.NET که بر روی آن کار می کنيد را درنظر گرفته و Code Behind صفحه اول (يا هر صفحه دلخواه ديگر) را باز کنيد (مثلا فايلindex.aspx.vb يا default.aspx.vb و يا هر فايل مورد نظر ديگر...)،
    • در ادامه پروسه مجری ASP.NET را بايد به Debugger متصل نماييد. همانطور که در ابتدای مقاله ذکر شد، اين پروسه يا ASPNET_wp.exe است و يا INETinfo.exe. به هر حال برای متصل کردن آن به Debugger، منوی Tools | Debug Processes را انتخاب کنيد و پروسه ذکر شده را از ليست سمت چپ انتخاب و سپس دکمه Attach را فشار دهيد. توجه کنيد پروسه INETinfo.exe يک پروسه سيستمی است و برای انتخاب آن بايد قبل از آن گزينه Show System Processes را انتخاب کنيد تا اين پروسه در ليست مربوطه به نمايش درآيد. توجه کنيد، در صورت عدم وجود پروسه ASPNET_wp.exe، اقدام به انتخاب اين پروسه نماييد.

    هم اکنون Debugger آماده است. برای ديدن Threadها بدين صورت عمل نماييد:
    از منوی Debug، زيرمنوی Windows، گزينه Threads را انتخاب نماييد. يا اينکه به صورت مستقيم دکمه های Ctrl + Alt + H را همزمان فشار دهيد.همچنين توصيه می شود که برای بهتر ديدن نحوه استفاده از Threadها صفحه ای که قصد debug آنرا داريد، حتما شامل چند خط کد و برنامه باشد.

    هم اکنون در ابتدای روال رويداد Page_Load يک Breakpoint قرار دهيد تا به محض شروع به بار کردن صفحه، بتوانيد اجرای آنرا در دست بگيريد.
    هم اکنون همه چيز برای ديدن نحوه کار Threadها آماده است. حالا يک صفحه اينترنت اکسپلورر باز کنيد و يک درخواست برای ديدن صفحه مورد نظر (صفحه ای که Code Behind آن در Debugger باز شده است) انجام دهيد. خوب به علت وجود Breakpoint در روال رويداد Page_Load، اجرای برنامه در خط مورد نظر متوقف می شود. در پنجره Threads چه مشاهده می کنيد؟... می بينيد که يک خط به جدول آن اضافه شده است. اين خط حاوی اطلاعات زير است:

    • شماره ID مربوط به Thread در حال اجرا،
    • نام Thread، که معمولا <noname> می باشد،
    • Thread Location که بيانگر محل اجرای کد می باشد. اين مقدار معمولا نشاندهنده نام روال در حال اجرا هست (مثلا در قسمت هايی از اجرا نشان دهنده اجرای روال Page_Load است)
    • و موارد ديگر...

    در هنگام اجرای اين صفحه مشاهده می کنيد که يک فلش زرد رنگ کوچک مقابل آن Thread قرار دارد که بيانگر اين است که هم اکنون اين Thread در حال استفاده است. با فشردن کليد F5 اجازه دهيد که برنامه ادامه يابد تا از Debugger خارج شده و حاصل آنرا ببينيد. خواهيد ديد که فلش زرد از جلوی Thread مذکور برداشته شده است. اين بدين معنی است که Thread مورد نظر رها شده و بدست سيستم عامل بازگشته است. حال توسط دو صفحه مجزای اينترنت اکسپلورر، دو درخواست به همان صفحه بدهيد. در اين حالت می خواهيم بررسی کنيم که چگونه درخواست های همزمان (يا تقريبا همزمان) مديريت می شوند.

    پس از اينکه دو درخواست را ارسال کرديد، به Debugger بازگرديد. خوب احتمالا خواهيد ديد که يک Thread در پنجره Threads ديده می شود که نشاندهنده اولين درخواست است. با فشردن F11 (يا F10) يک خط يا چند خط آنرا اجرا نماييد، پس از اجرای اين چند خط (بستگی به ساختار برنامه شما دارد) مشاهده خواهيد کرد که اجرا به ابتدای روال Page_Load بازخواهد گشت!!... در واقع چنين نيست. يک نگاه به پنجره Threads بيندازيد. خواهيد ديد که يک Thread جديد نيز به اين ليست اضافه شده است. در واقع هنگامی که اجرا ظاهرا به خط اول بازگشته، چنين نبوده است، بلکه CLR شروع به اجرای درخواست دوم بصورت همزمان نموده است. حال با فشردن کليد F11 (يا F10) اجازه دهيد چند خط ديگر نيز به اجرا درآيد. مشاهده می کنيد که کنترل به Thread اول بازگشته است. حال همينطور به اينکار ادامه دهيد، می بينيد که فلش زرد رنگ کوچک موجود در پنجره Threads بطور متناوب بين Thread های موجود درليست حرکت می کند. ميزان اجرای تعداد کدهای موجود در Thread اول نسبت به Thread دوم در يک لحظه از زمان تقريبا برابر است. بدين معنی که به ازای هر يک خط اجرا از Thread اول، تقريبا يک خط از کد موجود در Thread دوم نيز اجرا می گردد. علت آنکه اين مقدار تقريبی بيان شده است، اين است که بسته به نوع کدهای موجود، ممکن است در يک لحظه چند کد از يک Thread باهم اجرا گردند. به هر حال از اين مثال می توان نتايج زير را بدست آورد:

    • هر Thread بيانگر اجرای يک درخواست است. پس می توان گفت که هر صفحه درخواستی از طرف کاربر در يک Thread اجرا می شود. بنابراين هر صفحه در يک Thread اجرا می شود.
    • با اين مثال بايد بصورت کاملا آشکاری درک کرده باشيد که واقعا درخواست ها بصورت همزمان انجام ميشوند. بسياری از برنامه نويسان اينگونه فکر می کنند که درخواستها در يک صف قرار گرفته و به ترتيب اجرا می شوند. در جواب بايد گفت که اينگونه نيست. در واقع تا جايی که ممکن باشد، درخواست ها بصورت همزمان انجام می شوند، مگر آنکه تعداد درخواست آنقدر زياد باشد که از حد تعداد Thread های مجاز برای استفاده يک برنامه بگذرد. در اين حالت درخواست های بعدی در يک صف قرار می گيرند.
    • اين روش به صفحات مشابه محدود نمی شود. بدين معنی که هر تعداد درخواست از صفحات متفاوت، در صورت امکان، همزمان انجام می شود.
    • شايد با انجام تعداد درخواست های همزمان بيشتر مشاهده نماييد که مابقی درخواست ها در صف قرار گيرند (مثلا فقط چهار درخواست همزمان اجرا گردند). اين به CLR، سيستم عامل و شرايط حاکم بر سيستم شما باز می گردد.

    خوب هم اکنون بايد مفهوم همزمانی برای شما مشخص شده باشد. درک اين موضوع در مواردی بسيار حائز اهميت است. احتمالا اين سوال برای شما پيش آمده است که با اجرای همزمان ممکن است بسياری از مسايل با مشکل مواجه شوند. مخصوصا منابع مشترک در برنامه. اول آنکه بايد خاطر نشان کرد که ASP.NET در بسياری از موارد خود اين موضوع را مديريت می کند و شما را درگير برنامه های Multi-Threading (همين مفهوم استفاده از چند Thread در يک زمان را گويند) نمی کند. می توان گفت که مايکروسافت در اين زمينه بسيار مناسب عمل کرده است، چون کار کردن با برنامه های MultiThreading از مسايل بسيار پيچيده و پردردسر برنامه نويسی است.

    به هر حال مواردی هست که نياز به کنترل دارد. مثلا هنگامی که شما يک شئ را در Application يا Cache قرار می دهيد و اين امکان نيز وجود داشته باشد که هر کاربر آنرا تغيير دهد، بايد حتما اين موارد را پيش بينی نماييد. در غير اينصورت امکان تغيير همزمان در يک شئ وجود دارد و در بسياری از موارد باعث خراب شدن شئ شما خواهد شد.

    Thread-Safety چيست؟
    احتمالا اين کلمه را هنگامی که به راهنمای کلاسهای موجود در NET Framework. مراجعه کرديد بسيار مشاهده نموده ايد. معمولا محتوی آن بر اين مضمون است که:

    " کليه متدهای static (يا shared در VB.NET) برای عملياتهای MultiThreaded مطمئن و امن است، ولی برای مابقی متدها تضمينی نيست. "

    اين بدين معنی است که در صورتيکه شما درخواست های همزمان داشته باشيد، متدهايی از نوع فوق خود از بروز مشکل جلوگيری می کنند. مثلا اگر متد insert برای يک شی Thread-Safe بود، بدين معنی است که اگر از اين متد استفاده شد، و در همان لحظه در يک Thread ديگر قصد بود که delete استفاده شود (برای همان نمونه ايجاد شده از کلاس)، باعث خراب شدن شی نمی شود و اين موضوع را کلاس تضمين می کند. همانطور که قبلا ذکر شد، عمليات های MultiThreaded، آنهايی هستند که می توانند در يک لحظه از زمان با هم اجرا گردند (نمونه ای که در مثال مربوط به کار با Debugger نشان داده شد، از همين نوع بود، چراکه چند Thread همزمان اجرا می شدند).

    در مقاله بعد سعی خواهم کرد که يک نمونه از عمليات هايی که مجبور به کنترل آن هستيد و به اصطلاح Thread-Safe نيستد را شرح دهم که با اين مساله و نحوه کنترل آن بيشتر آشنا شويد.

    در انتها لازم به ذکر است که در اين مقاله سعی شد موارد فوق بصورت ساده ای بيان گردند. بنابراين ممکن است که بعضی موارد فوق در واقعيت آنطور که گفته شد نباشند. ولی از آنجايی که اين نوع فرض، به اصل موضوع لطمه ای وارد نمی کند و باعث درک صحيح و آسانی نيز می شود، بدين گونه آورده شده است (مانند بسياری از فرض هايی که در علومی مانند رياضی و فيزيک در نظرگرفته می شود تا مسائل بهتر و آسانتر حلاجی شوند، و اين در حالی است که ممکن است فرض کاملا صحيح نباشد!!).

    نام منابعی که در تهيه اين مقاله از آن کمک گرفته شد (همگی ازNET Framework Developer's Guide.):

    • Threads and Threading
    • Threading
    • Thread Synchronization
    • MultiThreaded Applications
    • Application Domains and Threads

    و همچنين کتاب Professional ASP.NET 1.0 از انتشارات Wrox Press

  5. #5
    کاربرسایت Unknown آواتار ها
    تاریخ عضویت
    ۸۶-۰۴-۱۹
    نوشته ها
    4,190
    سپاس ها
    0
    سپاس شده 2 در 2 پست

    پاسخ : آموزش ASP.net

    استخراج داده از XML در ASP.NET
    در اين مقاله با يکی از روشهای ساده استخراج داده از XML به عنوان منبع برای داده های کوچک آشنا می شويم.

    يکی از انتخاب های ما برای استخراج داده ها از فايلهای xml استفاده از dataset و يا XMLDocument است که با توجه به منابع زيادی که هر دو اينها استفاده می کنند در بعضی شرايط قابل استفاده نيستند. در اين موارد پيشنهاد می شود که از XMLTextReader برای اين منظور استفاده شود. XMLTextReader نوعی دسترسی سريع و روبه جلو (ForwardOnly) را برای ما مهيا ميکند که در ضمن به خاطر ويژگی non-cached بار زيادی به حافظه اعمال نمی کند.

    چند متدی که معمولا بيشتر استفاده می شوند :

    ()Read که تقريبا شبيه متد هم نام خود در DataReader عمل می کند.

    ()ReadElementString متن درون المنت را برمی گرداند.

    و همچنين ويژگی Item که Attributeها و مقادير آنها را نگهداری ميکند. شما با استفاده از HasAttributes می توانيد مطمئن شويد که يک المنت دارای Attribute هست يا خير.

    مثال:

    به اين فايل XML توجه کنيد :

    <?xml version="1.0" encoding="utf-8" ?>
    <Root>
    <data>
    <id>1</id>
    <into date="2003-02-18" where="ايران" />
    <comment show="true" title="hi!" />
    </data>
    <Root>

    من برای خواندن Attributeها از المنت comment و متن المنت id از اين فايل XMLای که در بالا آمده اينچنين عمل می کنم:

    Dim xrdr As New XmlTextReader(path)
    Dim s, t, id As String

    While xrdr.Read()

    If xrdr.HasAttributes And xrdr.name="comment" Then

    s = xrdr.item("show")

    t = xrdr.item("title")

    ElseIf xrdr.name="id" Then

    id = xrdr.ReadElementString ()

    End If

    End While

    xrdr.Close()

    استفاده از XML به عنوان منابع داده های کوچک می تواند ما را در بسياری از عمليات برنامه های کاربردی وب کمک کند. به خصوص برنامه هايی که به مصرف منابع حساس هستند.

اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. پاسخ ها: 0
    آخرين نوشته: جمعه ۱۰ مهر ۸۸, ۱۱:۵۹
  2. سوابق كشاورز گزينه پيشنهادي وزارت آموزش و پرورش دولت دهم
    توسط hamid192 در انجمن بایگانی اخبار سیاسی
    پاسخ ها: 0
    آخرين نوشته: پنجشنبه ۱۲ شهریور ۸۸, ۰۱:۵۱
  3. ميانگين وزارت وزاري دادگستري
    توسط MR HAMID در انجمن مباحث حقوقی و قضائی
    پاسخ ها: 0
    آخرين نوشته: چهارشنبه ۲۲ اسفند ۸۶, ۰۰:۳۶
  4. پاسخ ها: 0
    آخرين نوشته: جمعه ۳۰ آذر ۸۶, ۱۳:۲۸
  5. تاپیک آموزش گیتار - مقالات آموزشی
    توسط Unknown در انجمن هنر موسیقی
    پاسخ ها: 18
    آخرين نوشته: سه شنبه ۲۲ آبان ۸۶, ۱۲:۱۹

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •