درخواست های ارتباط
جستجو
لیست دوستان من
صندوق پیام
همه را دیدم
  • در حال دریافت لیست پیام ها
صندوق پیام
رویدادها
همه را دیدم
  • در حال دریافت لیست رویدادها
همه رویدادهای من
تخفیف های وب سایت
همه تخفیف ها

عضویت در

کانال تلگرام

توسینسو

اطلاعات مطلب
مدرس/نویسنده
حسین احمدی
امتیاز: 215942
رتبه:3
344
265
416
2833
حسین احمدی ، بنیانگذار TOSINSO ، توسعه دهنده وب و برنامه نویس ، بیش از 12 سال سابقه فعالیت حرفه ای در سطح کلان ، مشاور ، مدیر پروژه و مدرس نهادهای مالی و اعتباری ، تخصص در پلتفرم دات نت و زبان سی شارپ ، طراحی و توسعه وب ، امنیت نرم افزار ، تحلیل سیستم های اطلاعاتی و داده کاوی ... پروفایل کاربر

آموزش زبان سی شارپ - قسمت دوم :: آشنایی با .NET Framework و ساختار آن (بخش دوم)

تاریخ 56 ماه قبل
نظرات 8
بازدیدها 3626
آموزش زبان سی شارپ - قسمت دوم :: آشنایی با .NET Framework و ساختار آن (بخش بخش دوم)

در بخش قبلی آموزش زبان سی شارپ، با برخی مفاهیم در .NET Framework آشنا شدیم. در ادامه قصد داریم مفاهیم را بیشتر باز کرده و برخی خدمات .NET Framework را با هم بررسی کنیم. مطالبی که در این قسمت به آنها خواهیم پرداخت به شرح زیر می باشند:

  1. آشنایی با برخی سرویس های ارائه شده توسط CLR
  2. اجرای کدها در دات نت و سرویس JIT و اجرای مدیریت شده کد ها
  3. مدیریت حافظه و سرویس GC

قسمت های قبلی این آموزش از طریق لینک های زیر قابل دسترس می باشند:

  1. دوره آموزشی .NET Framework و زبان برنامه نویسی سی شارپ - مقدمه
  2. آموزش سی شارپ - قسمت اول معرفی و بررسی ابزارهای مورد نیاز دوره
  3. آموزش زبان سی شارپ - قسمت دوم آشنایی با .NET Framework و ساختار آن (بخش اول)


آشنایی با برخی سرویس های ارائه شده توسط CLR


همانطور که در بخش قبلی خدمت دوستان گفتیم، CLR قلب تپنده دات نت بوده و اکثر وظایف زمان اجرای برنامه های دات نت به عهده CLR می باشد. در حقیقت، برای اجرای برنامه های مبتنی بر دات نت، حتما" باید نسخه مربوطه .NET Framework بر روی سیستم مقصد نصب شده باشد. در این بخش قصد داریم تا برخی از سرویس های CLR را خدمت دوستان معرفی کرده و در مورد دو سرویس، یعنی JIT و GC به تفصیل صحبت کنیم. در تصویر زیر نمای کلی از سرویس های CLR را مشاهده می کنید:

سرویس های CLR


  1. Class Loader: این سرویس وظیفه بارگذاری کلاس ها در زمان اجرا در محیط CLR را به عهده دارد
  2. IL to Native: در قسمت قبل گفتیم که کدهای نوشته شده در زبان های مبتنی بر دات نت، بعد از کامپایل به یک زبان میانی به نام IL تبدیل می شوند، این سرویس وظیفه تبدیل کدهای IL به کد ماشین جهت اجرای برنامه را به عهده دارد. در این بخش به تفصیل به معرفی این سرویس می پردازیم.
  3. Code Manager: این سرویس وظیفه مدیریت کدها در زمان اجرا را به عهده دارد.
  4. Garbage Collector: با کمک این سرویس، CLR کار مدیریت حافظه را انجام می دهد، پاک سازی حافظه از اشیاء بلااستفاده از وظایف GC می باشد. در این بخش به تفصیل به معرفی این سرویس می پردازیم.
  5. Debug Engine: یکی از امکانات مورد نیاز برنامه نویسان، قابلیت خطا یابی برنامه ها می باشد که این سرویس، قابلیت خطایابی یا همان Debugging را به برنامه نویسان می دهد.
  6. Type Checker: یکی از ویژگی های دات نت، Type Safety می باشد، بدین معنی که تمام Data Type ها یا نوع های داده باید مشخص باشند. برای مثال شما در دات نت نمی توانید در یک متغیر از نوع عددی، رشته ای را ذخیره کنید یا باالعکس، این سرویس وظیفه کنترل نوع های داده را به عهده دارد!
  7. Security Engine: یکی دیگر از سرویس های CLR می باشد که وظیفه امنیت اجرای کدها در محیط دات نت را به عهده دارد. در مورد این سرویس و امنیت در دات نت به تفصیل در فصل های آتی صحبت خواهیم کرد.
  8. Exception Manager: هنگامی که در برنامه های مبتنی بر دات نت، خطایی اتفاق می افتد، CLR یک استثنا یا Exception برای آن خطا ایجاد می کند، وظیفه کنترل و مدیریت استثناها به عهده این سرویس می باشد.
  9. COM Marshaler: یکی از مزایای دات نت، قابلیت ارتباط با اجزای COM که در بخش قبلی در مورد آن صحبت کردیم می باشد، این سرویس وظیفه انتقال اطلاعات بین برنامه های دات نت و اجزای COM را به عهده دارد.
  10. Thread Support: یکی از ویژگی های برنامه های امروزی، قابلیت Multi-Threading جهت همزمانی انجام وظایف و عملیات ها می باشد که باعث بالارفتن کارایی برنامه می شود، این سرویس وظیفه مدیریت اجرای کدها به صورت Multi-Thread را به عهده دارد.
  11. Base Class Library: امکان دسترسی به کتابخانه پایه دات نت را به برنامه ها می دهد. در مورد BCL در قسمت قبلی توضیح دادیم.


اجرای کدها در دات نت و سرویس JIT و اجرای مدیریت شده کد ها


روند اجرای کدها در دات نت، کمی پیچیده ولی در عین حال، بسیار کارامد است. زیرا طراحی این قسمت توسط شرکت مایکروسافت طوری انجام شده که اجرای کدها به بهینه ترین شکل ممکن انجام شود. همانطور که در قسمت قبلی گفتیم، سرویسی که وظیفه اجرای کدها در دات نت را دارد، کامپایلر JIT یا Just-In-Time می باشد. در زیر به صورت قدم به قدم به تشریح روند کامپایل و اجرای کدها، از زمان کامپایل توسط کامپایلر زبان برنامه نویسی تا زمان اجرای کد توسط JIT می پردازیم:

  1. در قدم اول شما کد مورد نظر خود را با زبان برنامه نویسی مورد نظرتان مانند سی شارپ می نویسید.
  2. در ادامه، با کمک کامپایلر زبان مورد نظر، کدی که شما نوشتید به زبان IL ترجمه شده و داخل یک فایل به نام Assembly قرار داده می شوند. Assembly ها فایل هایی هستند که بعد از کامپایل کدها توسط کامپایلر ایجاد می شوند. Assembly ها شامل کد IL برنامه، Metadata ها که اطلاعاتی در مورد کد نوشته شده توسط شما در اختیار CLR قرار می دهد و Assembly Manifest که اطلاعات اولیه در مورد اسمبلی مانند نسخه و ... می باشند. (در مورد Metadata ها Manifest در بخش Reflection به تفضیل صحبت خواهیم کرد)
  3. بعد از ایجاد Assembly توسط کامپایلر، با اجرای برنامه، CLR وارد صحنه می شود. بدین صورت که ابتدا توسط سرویس Class Loader که در بخش قبلی در مورد آن توضیح دادیم، اطلاعت اولیه مورد نیاز جهت اجرای کد مانند کد IL و Metadata را داخل حافظه بارگذاری شده، و سپس کد بارگذاری شده توسط Class Loader توسط JIT به کد ماشین تبدیل شده و اجرا می شود.

نکته 1: هر اسمبلی دات نت برای اجرا نیاز به یک نقطه شروع یا Entiry Point دارد که Class Loader در ابتدا این بخش، یعنی Entry Point را در حافظه بارگذاری کرده و JIT آن را اجرا می کند.
نکته 2: برنامه های نوشته شده توسط دات نت، می توانند شامل چندین هزار خط و بخش مجزا باشند، از مزیت های JIT این است که برای اجرای برنامه ها، کل کدها را یکجا به کد ماشین تبدیل نمی کند، بلکه تنها بخش مورد نیاز برای اجرا توسط Class Loader در حافظه بارگذاری شده و توسط JIT اجرا می شود. با این کار سرعت باگذاری اولیه برنامه های دات نت بسیار بالا می رود.

اما MCE یا Managed Code Execution دقیقا" به چه معناست؟ همانطور که گفتیم، CLR پروسه ای برای اجرای کدها دارد که به شرح زیر می باشد:

  1. بارگذاری کد IL و Meta Data های مربوطه
  2. تبدیل کد IL به کد Native و اجرای آن
  3. کنترل و مدیریت حافظه در زمان اجرای برنامه
  4. اعمال Type Safety
  5. کنترل امنیت در اجرای برنامه ها
  6. مدیریت Exception ها

پروسه ایی در بالا برای اجرای کدها در دات نت ذکر شد به MCE یا همون Managed Code Execution شناخته میشه. البته مطالب در مورد این موضوع بسیار است که به دلیل تخصصی بودن مطالب، در بخش پیشرفته آموزش سی شارپ به تفصیل به موضوعات مربوط به CLR و اجرای کدها خواهیم پرداخت.


مدیریت حافظه و سرویس GC


یکی از کابوس های برنامه نویسان، بهتره بگیم بزرگترین کابوس، مدیریت و استفاده بهینه از حافظه کامپیوتر می باشد. برنامه ای که از حافظه استفاده بهینه داشته باشد، سرعت اجرا و عملکرد بهتری دارد. اگر شما با زبان هایی که مدیریت حافظه در آنها به صورت خودکار نباشد، کار کرده باشید، حتما" واژه کابوس را تائید می کنید. اما در دات نت، مسئله مدیریت و استفاده بهینه از حافظه بوسیله سرویس GC یا Garbage Collector به صورت کامل حل شده است. در حقیقت سرویس GC وظیفه مانیتور کردن حافظه در حین اجرای برنامه و پاک سازی آن را به عهده دارد. به همین دلیل شما به عنوان برنامه نویس، هیچ گونه نگرانی در مورد پاک سازی حافظه را نخواهید داشت.

پروسه آزاد سازی حافظه در دات نت، کمی پیچیده است، اما به طور کلی، در مدیریت حافظه توسط CLR، دو وظیفه کلی وجود دارد. تخصیص حافظه و آزاد سازی حافظه که این وظایف به صورت خودکار توسط CLR انجام می شوند.

در ادامه آموزش بخشی را به سرویس GC اختصاص خواهیم داد که در آن بخش به طور کامل با پروسه های تخصیص و آزاد سازی حافظه، Finalizer ها و Generation ها در GC آشنا خواهیم شد.

با پایان بخش چهام آموزش سی شارپ، مفاهیم ابتدایی دات نت نیز به پایان می رسد. به امید خدا از بخش بعدی، کار اصلی ما، یعنی شروع نوشتن کدها به زبان سی شارپ آغاز خواهد شد. در بخش بعدی با محیط Visual Studio آشنا شده و اولین برنامه خود را به زبان سی شارپ خواهیم نوشت.

نویسنده : حسین احمدی
منبع : جزیره برنامه نویسی وب سایت توسینسو
هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی است
برچسب ها
ردیف عنوان
1 دوره آموزشی .NET Framework و زبان برنامه نویسی سی شارپ - مقدمه
2 آموزش سی شارپ - قسمت اول :: معرفی و بررسی ابزارهای مورد نیاز دوره
3 آموزش زبان سی شارپ - قسمت دوم :: آشنایی با .NET Framework و ساختار آن (بخش اول)
4 آموزش زبان سی شارپ - قسمت دوم :: آشنایی با .NET Framework و ساختار آن (بخش دوم)
5 آموزش زبان سی شارپ - قسمت سوم :: آشنایی اولیه با محیط Visual Studio و نوشتن اولین برنامه
6 آموزش زبان سی شارپ - قسمت چهارم :: آشنایی با ساختار برنامه ها و کامپایلر زبان سی شارپ
7 آموزش زبان سی شارپ - قسمت پنجم :: آشنایی با دستورات کنسول و متغیرها
8 آموزش زبان سی شارپ - قسمت ششم :: نوع های داده اولیه
9 آموزش زبان سی شارپ - قسمت هفتم :: آشنایی با عملگرهای زبان سی شارپ
10 آموزش زبان سی شارپ - قسمت هشتم :: آشنایی با دستورات کنترلی و حلقه ها (بخش اول)
11 آموزش زبان سی شارپ - قسمت هشتم :: آشنایی با دستورات کنترلی و حلقه ها (بخش دوم)
12 آموزش زبان سی شارپ - قسمت هشتم :: آشنایی با دستورات کنترلی و حلقه ها (بخش سوم)
13 آموزش زبان سی شارپ - قسمت هشتم :: آشنایی با دستورات کنترلی و حلقه ها (بخش چهارم)
14 آموزش زبان سی شارپ - قسمت نهم :: آشنایی با آرایه ها و دستور foreach
15 آموزش زبان سی شارپ - قسمت دهم :: آشنایی با متدها در زبان سی شارپ (بخش اول)
16 آموزش زبان سی شارپ - قسمت دهم :: آشنایی با متدها در زبان سی شارپ (بخش دوم)
17 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت یازدهم :: مقدمه ای بر برنامه نویسی شئ گرا
18 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت دوازدهم :: آشنایی با کلاس، اشیاء و فضاهای نام
19 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت سیزدهم :: آشنایی با فیلدها و رفتارها
20 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت چهاردهم :: آشنایی با Property ها
21 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت پانزدهم :: آشنایی با سازنده ها و روش های ایجاد اشیاء
22 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت شانزدهم :: وراثت یا Inheritance
23 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت هفدهم :: آشنایی با مفهوم Polymorphism
24 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت هجدهم:: کلاس های abstract و sealed
25 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت نوزدهم :: سازنده ها در وراثت، کلمه کلیدی protected و فیلدهای readonly
26 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت بیستم :: کلاس های static و partial و Extension Method ها
27 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت بیست و یکم :: Reference Types و Value Types
28 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت بیست و دوم :: آشنایی با کاربرد interface ها
29 آموزش برنامه نویسی شئ گرا در زبان سی شارپ - قسمت بیست و سوم :: آشنایی با مفاهیم Inversion of Control و Dependency Injection
30 آموزش برنامه نویسی شئ گرا در زبان سی شارپ -قسمت بیست و چهارم :: آشنایی با مفهوم Type Casting و انواع Cast ها
31 آموزش برنامه نویسی شئ گرا در زبان سی شارپ -قسمت بیست و پنجم :: آشنایی با operator overloading و تعریف cast ها
32 آموزش برنامه نویسی شئ گرا در زبان سی شارپ -قسمت بیست و ششم :: مفاهیم boxing و unboxing
33 آموزش برنامه نویسی شئ گرا در زبان سی شارپ -قسمت بیست و هفتم :: قابلیت Generics
34 آموزش برنامه نویسی شئ گرا در زبان سی شارپ -قسمت بیست و هشتم :: نکات تکمیلی Generic ها، کلاس List و کلاس Dictionary
35 آموزش زبان سی شارپ -قسمت بیست و نهم (پایانی): استثناء ها (Exceptions) و مدیریت خطاها در سی شارپ
دوره مجموعه کل دوره
مطالب مرتبط

در حال دریافت اطلاعات

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

  • من باویژوال فاکس پرو برنامه نویسی می کنم و در حال حاضر نسبت به برنامه نویسی تحت وب ناآشنا هستم فوق العاده عالیه ممنون
  • فوق العاده عالیه ممنون
    مهندس من ي خواهشي دارم اگه ميشه PDF هر صفحه را زير هر صفحه بزاريد تا بچه هاي مثل ما كه اينترنت كمي دارند بتونيم بعدا از طريق آفلاين استفاده مي كنيم.
    با تشكر.....
  • ممنون از شما، از قسمت بالای صفحه، امکان دریافت مطالب به صورت PDF و همچنین نسخه قابل چاپ وجود داره.
  • سلام استاد
    میشه لطفا راجع به Exception Manager بیشتر توضیح بدید و اینکه منظور از استثناها دقیقا چیه؟
  • سلام، Exception ها در حقیقت خطاهایی هستند که در برنامه های دات نت اتفاق می افتن، برای مثال، زمانی که شما عددی رو تقسیم بر صفر می کنید خطای Divide By Zero رخ میده، حالا هر Exception ای که اتفاق میافته یک کلاس معادل داره، همین خطای تقسیم بر صفر کلاسی با نام DivideByZeroException براش تعریف شده که زمان وقوع اطلاعات مربوط به خطا در این کلاس در اختیار کاربر قرار میگیره. Exception Manager یک سرویس در .NET Framework هست که کار مدیریت Exception ها رو بر عهده داره.
  • متشکرم استاد.

برای ارسال نظر ابتدا به سایت وارد شوید