آکادمی سیم پاور

مديريت حافظه در NET.

مديريت حافظه در NET. :

 

يكي از مهمترين ويژگيهاي كدهاي مديريت شده، بخش مديريت حافظه در اين نوع كـدها اسـت كـه بـه وسـيله سيـستمي بـه نـامGarbage Collection و يا به اختصار GC انجام مي شود. چارچوب NET. با استفاده از اين سيـستم مـي توانـداطمينان حاصل كند كه حافظه اي كه به يك برنا مه اختصاص داده مي شود، با پايان برنامـه بـه طـور كامـل بازيـابي مـي شـود . درزبانهاي برنامه نويسي قبل از NET.، اين مورد به وسيله برنامه نويس كنترل مي شد و امكان داشت كه با يك اشـتباه كوچـك دركد برنامه، مقدار زيادي از فضاي حافظه غير قابل استفاده بماند و برنامه با ك مبود حافظه مواجه شود. اين گونه مشكلات باعث كاهشسرعت برنامه ها و حتي در بعضي شرايط باعث توقف سيستم مي شد .

نحوه كار GC در NET. به اين صورت است كه در زمانهاي مشخصي به بررسـي حافظـه مـي پـردازد و داده هـايي را كـه ديگـراستفاده نمي شوند از حافظه پاك مي كند . البته بررسي حافظه توسط GC در فاصله هاي زماني ثابت صورت نمي گيرد بلكـه ممكـن است در شرايطي در هر ثانيه چندين هزار بار اجرا شود و در شرايط ديگر در هر چند ثانيه يك بار اجرا شود

.

 

مراحل اجراي برنامه در NET.

 

قبل از ادامه، مراحل لازم براي ايجاد يك برنامه با NET. را كه در قسمتهاي قبلي توضيح داده شد جمع بندي مي كنيم :

 

1 كد برنامه به وسيله يكي از زبانهاي سازگار با NET. مانند #C نوشته مي شود (شكل ):2

sim-power.ir (021)شكل1

 

)2 اين كد به زبان MSIL كامپايل مي شود و سپس در يك فايل اسمبلي ذخيره مي شود (شكل ):2-2

sim-power.ir (022) شكل2-2

 

)3 هنگامي كه كد بخواهد اجرا شود (چه خود فايل اجرايي باشد و به تنهايي اجرا شود، چه يك فايل حاوي توابع مورد استفاده باشد و به وسيله ديگر برنامه ها احضار شود ) ابتدا بايد به وسيله يك كامپايلر ديگر به كد محلي تبديل شود . ايـن كامپـايلر JIT نام دارد (شكل ):2-3

 

sim-power.ir (023)

 شكل 2-3

)4 كد محلي توليد شده به وسيله JIT به همراه ديگر برنامه هاي در حال اجرا كه به وسيله NET. نوشته شده اند، تحت كنترل CLR به اجرا در مي آيد (شكل ):2-4

 

sim-power.ir (024) شكل2-4

 

لينك دادن :

 

در تكميل گفته هاي قبلي، فقط يك بخش ديگر باقي مانده است . كد #C يك برنامه كه در اولين مرحله به زبـان MSIL تبـديل مي شود حتماً نبايد در يك فايل باشد، بلكه مي توانيم برنامه را در چندين فايل سورس كد قرار دهيم و سپس آنهـا را در يـك فايـل اسمبلي كامپايل كنيم . به اين عمل لينك كردن گفته مي شود كه در برنامه ها كاربرد زيادي دارد. فايده اين روش در ايـن اسـت كـه معمولا براي برنامه نويس كار با چند فايل كوچك راحت تر از كار با يك فايل بزرگ است. براي مثال مي توانيد سورس يك برنامه رابه چندين فايل مجزا تقسيم كنيد و سپس به طور جداگانه بر روي هر يك از آنها كار كنيد . به اين ترتيب در مواقـع مـورد نيـاز، پيـداكردن قسمت خاصي از كد نيز بسيار راحت تر خواهد شد .

يكي ديگر از قابليتهاي اين روش در اين است كه گروههاي برنامه نويسي مي توانند يك برنامه را به چند قسمت تقسيم كنند . به اينترتيب هر كدام از برنامه نويسان مي توانند بر روي يك قسمت خاص كار كند بدون اينكه در مورد نحوه پيـشرفت قـسمتهاي ديگـرنگران باشند .

 

#C چيست؟

 

همانطور كه در قسمتهاي قبلي نيز ذكر شد #C يكي از زبانهاي برنامه نويسي است كه به وسيله آن مي توان برنامه هايي با قابليـت اجرا در NET CLR. توليد كرد. زبان #C در حقيقت نسخه كامل شده ي زبانهاي برنامه نويسي C و ++C است كه به وسيله مايكروسافت براي كار با چارچوب NET. به وجود آمده است . با توجه به جديد بودن اين زبان برنامـه نويـسي، در ايجـاد آن سـعي شده است كه از ويژگيهاي خوب زبانهاي برنامه نويسي ديگر الهام گرفته شود و نيز كاستي هاي آن زبانها برطرف شود .

ايجاد يك برنامه در محيط #C بسيار راحت تر از ايجاد يـ ك برنامـه در محـيط ++C اسـت . عـلاوه بـر ايـن سـادگي، #C زبـان قدرتمندي نيز محسوب مي شود به نحوي كه اغلب كارهايي كه در ++C امكان پذير است در #C هم مي توان انجام داد. بعضي از ويژگيهاي #C كه هم سطح با ويژگيهاي پيشرفته در ++C هستند، همانند قابليت دسترسي مستقيم به حافظه و نيز تغيير آن، باعث مي شوند كه كدهاي يك برنامه به عنوان كد نا امن در نظر گرفته شود . استفاده از اين تكنيك هاي پيشرفته ي برنامه نويسي، عموماً خطرناك هستند زيرا ممكن است باعث شوند قسمتهاي مهم حافظه كه اطلاعات سيستم عامل در آن قرار دارد بـه طـور نـا خواسـته تغيير كند و سيستم متوقف شود. به همين دليل اين مباحث در اين كتاب مورد بررسي قرار نمي گيرند .

بعضي مواقع كدهاي زبان #C طولاني تر از كدهاي زبان ++C هستند. علت اين طولاني تر بودن كدها به خاطر اين است كه #C

1 بر خلاف ++C يك زبان نوع-امن است . در اصطلاح اين لغت به معن ي اين اسـت كـه هنگـامي كـه نـوع داده اي يـك متغييـر  مشخص شد، آن متغيير نمي تواند به يك نوع داده اي ديگر كه به آن مرتبط نيست تبديل شود . عـلاوه بـر ايـن مـورد يـك سـري محدوديتهاي ديگر نيز هنگام تبديل يك نوع داده اي به نوع داده اي ديگر نيز وجود دارد كه باعث مي شود كدهاي #C طولاني تـر از كدهاي ++C شوند، اما در مقابل كدهاي #C از پايداري بيشتري برخوردارند و نيز خطا يابي در آنها ساده تر است .

البته #C فقط يكي از زبانهاي برنامه نويسي است كه براي طراحي برنامه تحت NET. ايجاد شده است، اما به نظـر مـن مطمئنـاً بهترين زبان براي اين كار است . يكي از دلايل اين امر اين است كه زبان #C از پايه براي استفاده در محـيط NET. ايجـاد شـده است و معمولاً در پروژه هايي كه در رابطه با انتقال NET. به سيستم عامل هاي ديگر است، مانند Mono از اين زبان استفاده مي كنند. در زبانهاي ديگر، مانند نسخه NET. زبان ويژوال بيسيك، براي اينكه شباهت با نسلهاي قبلي خود را حفظ كنند، يكـسري از قسمتهاي CLR پشتيباني نمي شود . در مقابل با استفاده از زبان #C مي توان از تمام ويژگيهاي ارائه شـده بـه وسـيله NET. در برنامه استفاده كرد .

 

چه نوع برنامه هايي را ميتوان با استفاده از #C انجام داد؟

 

همانطور كه گفتم، در NET. هيچ محدوديتي براي نوع برنامه هاي قابل اجـرا وجـود نـدارد . زبـان #C نيـز از چـارچوب NET. استفاده مي كند، بنابراين هيچ محدوديتي در نوع برنامه هايي كه مي توان با اين زبان انجام داد وجود ندارد . اما بيشتر برنامه هايي كه با #C نوشته مي شوند جزء يكي از دسته برنامه هاي زير هستند :

 

برنامه ها ي مبتني بر ويندوز: اين نوع برنامه ها همانند Office برنامه هـايي هـستند كـه داراي ظـاهر آشـناي برنامه هاي ويندوزي هستند . اين نوع برنامه ها به وسيله فضاي نام مربوط به برنامه هاي ويندوزي در چـارچوب NET. نوشته مي شوند . اين فضاي نام شامل كنترل هايي از قبيل دكمه هاي فرمان، نوار ابزارها، منو ها و … است كه بـه وسـيله آنها مي توان رابط گرافيكي برنامه را طراحي كردبرنامه هاي مبتني بر وب : اين نوع برنامه ها شامل يك سري صفحات وب هستند كه ممكن است تاكنون به وسـيله مرورگر هاي مختلف اينترنت آنها را مشاهده كرده باشيد . چارچوب NET. داراي يك سيستم قوي براي ايجاد اتوماتيك  صفحات وب و تامين امنيت آنها و … است. اين سيستم ASP.NET ناميده مي شود و شما مـي توانيـد بـا اسـتفاده اززبان #C و سيستم ASP.NET برنامه هايي مبتني بر وب ايجاد كنيد.

 

سرويسهاي وب: وب سرويس ها يك روش جديد و جالب براي ايجاد برنامه هاي توزيع شدني مبتني بر وب هستند با .استفاده از وب سرويس ها مي توانيد هر نوع اطلاعاتي را از طريق اينترنت بين برنامه ها منتقل كنيد . در ايـن مـورد زبـان Type-Safeدر مورد نوع هاي داده اي و تبديل آنها به يكديگر در فصل بعد صحبت خواهيم كرد .

 Active Server Pages .NET

مورد استفاده در برنامه و يا سيستم عاملي كه برنامه در آن اجرا مي شود اهميتي ندارد . به عبارت ديگر برنامه ي شـما كـه تحت NET. و سيستم عامل ويندوز نوشته شده است مي تواند با برنامه هاي ديگر كه تحت سيستم عامل هـاي ديگـر عمل مي كند تبادل اطلاعات داشته باشد.

 

در هر كدام از اين برنامه هايي كه در بالا ذكر شد ممكن است به د سترسي به يك بانك اطلاعاتي نياز پيدا كنيد . براي اين منظور درNET 1. بايد از سيستمي به نام ADO.NETاستفاده كنيد .

 

ويژوال استوديو :

 

در طراحي برنامه هاي NET. استفاده از ويژوال استوديو موردي ضروري نيست . اما بـا اسـتفاده از آن سـرعت طراحـي برنامـه هـاافزايش شديدي پيدا مي كند . براي نوشتن برنامه با استفاده از #C تحت NET. مي توانيد حتي از يـك ويرايـشگر سـاده ي مـتن2 مانند Notepad نيز استفاده كنيد و سپس با استفاده از كامپايلر خط -فرمانNET. براي #C، آن را به يك برنامه قابل اجـراتبديل كنيد .

در زير ويژگيهايي از ويژوال استود يو NET. كه باعث مي شود اين محيط انتخـابي مناسـب بـراي برنامـه نويـسي تحـت NET.محسوب شود را بررسي خواهيم كرد :

 

ويژوال استوديو تمام مراحل كامپايل يك سورس كد به يك برنامه قابل اجرا را به صـورت اتوماتيـك انجـام مـي دهـد وهمچنين به برنامه نويس اجازه مي دهد هر قسمتي را كه بخواهد تغيير داده و تنظيم كند.ويرايشگر كد ويژوال استوديو براي كد نويسي زبان هاي پشتيباني شده در NET. بسيار هوشمند است و مي تواند هنگام نوشتن اين كدها خطاهاي آنها را تشخيص داده و در تصحيح آنها به برنامه نويس كمك كند.

ويژوال استوديو شامل محيطهايي براي طرا حي برنامه هاي ويندوزي و نيز برنامه هاي مبتني بر وب است كـه بـه كمـكآنها مي توانيد به سادگي محيط برنامه خود را طراحي كنيد.براي اينكه در NET. يك برنامه تحت ويندوز ايجاد كنيد بايد مقدار زيادي كد را كـه در اغلـب برنامـه هـا بـه صـورت تكراري هستند بنويسيد . اين مورد در ايجاد برنامه هايي از نوع هاي ديگر مانند برنامـه هـاي تحـت وب نيـز وجـود دارد .ويژوال استوديو با نوشتن اتوماتيك اين كدها در سرعت بخشيدن به طراحي برنامه ها كمك قابل توجهي مي كند.ويژوال استوديو داراي ويزارد هاي زيادي است كه بسياري از كارهاي عمومي را براي شما انج ام داده و كد مربوط به آنهـارا در برنامه قرار مي دهد. به اين ترتيب ديگر نيازي نيست در مورد نحوه نوشتن كد آنها نگران باشيد.

ويژوال استوديو داراي ابزارهاي قدرتمندي براي كنترل قسمتهاي مختلف يك پروژه از قبيـل سـورس كـدهاي #C و يـافايلهاي مورد نياز برنامه از قبيل فايلهاي صوتي و تصويري است.علاوه بر سادگي طراحي برنامه ها در NET.، توزيع آنها نيز بـسيار سـاده اسـت و بـه راحتـي مـي تـوان آن را بـر روي كامپيوترهاي مقصد اجرا كرد و يا به روز رساند.ويژوال استوديو داراي ابزارهاي قوي خطا يابي در برنامه است . براي مثال با استفاده از ا ين ابزارها مي توان برنامـه را خـط به خط اجرا كرد و در اجراي هر خط موقعيت برنامه را بررسي كرد.

1 Active Data Objects .NET

2 Command-Line Compiler

ويژگيهاي ويژوال استوديو بسيار بيشتر از موارد ذكر شده است اما همين مقدار براي نمايش مزاياي استفاده از آن كافي بـه نظـر مـي

رسد .

 

راه حلهاي ويژوال استوديو :

 

هنگامي كه  خواهيد يك برنامه را با ويژوال استوديو بنويسيد ابتدا بايد يك راه حلايجاد كنيد . يك راه حـل در اصـطلاح ويـژوال استوديو، از بيش از يك پروژه تشكيل مي شود . راه حل ها مي توانند شامل چندين پروژه از انواع مختلف باشـند . بـراي مثـال تـصور كنيد مي خواهيد برنامه اي براي يك شركت تجاري بنويسيد كه از دو قسمت تشكيل مي شود : در قسمت اول بايد يك برنامه تحـت ويندوز ايجاد كنيد كه امور مختلف آن شركت را كنترل كند، در قسمت دوم نيز بايد يك برنامه ي تحت وب ايجاد كنيد تـا اطلاعـات مربوط به آن شركت را در يك وب سايت نمايش دهد . براي هر كدام از ا ين قسمتها به يك پروژه ي مجزا نياز داريد . بنابراين در كل بايد دو پروژه ايجاد كنيد . براي در يك گروه قرار دادن اين دو پروژه مي توانيد از راه حل ها استفاده كنيد . به اين ترتيـب مـي توانيـد كدهاي مرتبط به هم را در يك جا گروه بندي كنيد، حتي اگر پروژه هاي آنها در قسم تهاي مختلـف هـارد ديـسك باشـند و هنگـام كامپايل چندين فايل اسمبلي مختلف در قسمتهاي متفاوت هارد ديسك ايجاد شود .

با استفاده از اين ويژگي مي توانيد همزمان بر روي كدهايي كه بين برنامه ها مشترك است ( بـراي مثـال اسـمبلي هـاي موجـود در GAC) و نيز برنامه اصلي كار كنيد . همچنين به علت اين كه براي كار بر روي اين پروژه ها از يك محيط طراحي استفاده مي كنيد، خطا يابي آنها نيز بسيار ساده تر خواهد شد .

 

نتيجه :

 

در اين فصل به معرفي NET. پرداختيم و ديديم كه چگونه مي تـوان بـا اسـتفاده از NET. بـه سـادگي برنامـه هـاي متنـوع وقدرتمندي را نوشت . مشاهده كرديد كه براي اجراي يك برنامه نوشته شده به زبان #C در NET. چه مراحلي بايد طي شوند و نيزمزيت هاي استفاده از كدهاي مديريت شده در NET CLR. نسبت به كدهاي مديريت نشده چيست .

در پايان  بايد با موارد زير آشنا شده باشيد :

چارچوب NET. چيست، چرا به وجود آمد و چه مواردي باعث قدرت و جذابيت آن مي شود؟

زبان #C چيست و چه چيز باعث مي شود كه به يك زبان برنامه نويسي مناسب تحت NET. تبديل شود؟

ويژوال استوديو 2005 چيست و چگونه مي تواند در تسريع نوشتن برنامه در NET. موثر واقع شود؟

سعید عربعامری
من سعید عربعامری نویسنده کتاب 28 گام موثر در فتح متلب مدرس کشوری متلب و سیمولینک و کارشناس ارشد مهندسی برق قدرتم . بعد از اینکه دیدم سایتهای متعدد یک مجموعه کامل آموزش متلب و سیمولینک ندارند به فکر راه اندازی این مجموعه شدم
http://sim-power.ir

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *