8 memory managment & pointers

20
Advanced C# Course 8- Memory management and Pointers

Transcript of 8 memory managment & pointers

Page 1: 8 memory managment & pointers

Advanced C# Course

8- Memory management and Pointers

Page 2: 8 memory managment & pointers

04/13/2023 11:49 PM 2

Outlines مقدمة المجهر تحت الذاكرة إدارة القيمة Value Typeأنواع المرجع Reference Typeأنواع النفايات Garbage Collectorجامع. قبل من الم/دارة غير الموارد NETتحرير اآلمنة غير Unsafe Codeالشيفرة

Page 3: 8 memory managment & pointers

04/13/2023 11:49 PM 3

مقدمة تؤمن.NET ( الم/دارة بالشيفرة /سمى ي ما وهذه( Managed Codeلنا

/عرف ي ما خالل من الذاكرة مع مباشر بشكل التعامل علينا تحظر الشيفرة(. Reference )بالمرجع

المناطق ضمن الذاكري الحجز كيفية إلى عميقة معرفة إلى نحتاج قدHeap , Stack.

. النفايات جامع عمل آلية قواعد اتصاالت أو المفتوحة الملفات مثل م/دارة الغير الموارد تحرير كيفية

المفتوحة . المعطيات لغة في المؤشرات استخدام # .Cكيفية

Page 4: 8 memory managment & pointers

04/13/2023 11:49 PM 4

المجهر تحت الذاكرة إدارة منصة تحت تعمل التي اللغات مزايا أهم /تعب #Cمثل NET.من ت ال أنها

وتحريرها . األغراض حجز وكيفية الذاكرة إدارة تفاصيل في المبرمج النفايات تحرير ( Collector Garbage )جامع عناء المبرمج على يوفر

الذاكرة في البرنامج ق_ب̂ل من المحجوزة المناطق المرجع وأنواع القيمة أنواع بين الفرق عن سنتكلم

Reference Data Type Vs Value Data Type

Page 5: 8 memory managment & pointers

04/13/2023 11:49 PM 5

القيمة Value Typeأنواع: المكدس يحوي

. المحلية المتحوالت. للتوابع االستدعاءات بارمترات. الستاتيكية المتحوالت( المكدسStack )القاعدة على تعتمد معطيات بنية وهو

(.Last In First Outأي( )LIFOالتالية ) البسيطة األنماط البنى Primitive Data Typeكل و

Struct هيvalue Type. المكدس ضمن وتحفظ

Page 6: 8 memory managment & pointers

04/13/2023 11:49 PM 6

القيمة Value Typeأنواع { int intval = 10;   double doubleval = 300.0; }

@800000@799999@799998@799997@799996@799995@799994@799993@799992@799991@799990@799989@799988

حجز

Page 7: 8 memory managment & pointers

04/13/2023 11:49 PM 7

القيمة Value Typeأنواع { int intval = 10;   double doubleval = 300.0; }

@800000@799999@799998@799997@799996@799995@799994@799993@799992@799991@799990@799989@799988

تحرير

حجز عملية أن نالحظواألغراض المتحوالت

المكدسهي ضمن ) جدا سريعة عملية

Page 8: 8 memory managment & pointers

04/13/2023 11:49 PM 8

المرجع Reference Typeأنواع للمتحوالت i جدا سريع وصول يعطينا المكدس عن عبارة هو المكدس صغيرة لكن بالكومة )منطقة iمقارنةHeap .)Class is Reference Type. التعليمة طريق عن حجزه يتم غرض ال Newأي معاملة /عامل ي

Reference Type تخزين عبارة المكدسفي ( Reference )المرجعيتم هو المرجع وهذا

الغرضضمن عن .Heapالذاكرة عنوان

Page 9: 8 memory managment & pointers

04/13/2023 11:49 PM 9

المرجع Reference Typeأنواع

Stack

s Object

Student s = new Student;)(

Heap

Reference is Read only

Pointer

Page 10: 8 memory managment & pointers

04/13/2023 11:49 PM 10

النفايات Garbage Collectorجامع { List<int> Arr = new List<int>(); }

ال من الخروج هو Referenceال يموت Scopeعند ) Arr والذي من المترجم يحررهالمكدس(.

( الكومة في موجود الحقيقي الغرض ( .Heapلكن. عليه يؤشر مؤشر أي دون من الغرض هذا يصبح لmتعمGC ذاكرmال تصmبح لهmا ممتلئ5ة ش5بهHeap عنmدما ليس الmتي األغmراض كmل بحmذف فتقmوم

Reference. المكدس في عليها يؤشر

Page 11: 8 memory managment & pointers

04/13/2023 11:49 PM 11

النفايات Garbage Collectorجامع يقومGC ضغطبعملية(Compact )للمنطقة Heap. المنطقة /صبح ت بشكل Heapباالتالي المحجوزة األغراض كل تحوي

ضائعة ومتالصق متسلسل مساحات أي دون منManaged Heap. ال تشغيل أنها GCيمكننا لنا يضمن شيء أي يوجد ال لكن قسري بشكل

ستعمل نريدها ! التي باللحظة

System.GC.Collect();

In useFree  

In use

In use

Free

 

Page 12: 8 memory managment & pointers

04/13/2023 11:49 PM 12

من الم/دارة غير الموارد تحريرNET.قبل

GC . المحجوزة الذاكرة تحرير عناء من المبرمج يريح لكنGC. م/دارة الغير الموارد بتحرير تقوم كيف تعرف ال( معين صف لدينا يكون لكي( . Classعندما م/دار غير غرض إلى مرجع يحوي

الم/دارة ) غير الموارد بتحرير نقوم قبل( Unmanaged Resourcesنجعل . الذاكرة من الغرض إزالة

طريقتانلدينا: ( هادم تابع عن بالتصريح ( Destructor or Finalizer Methodنقوم

الصف ضمن الواجهة IDisposableاستخدام. الطريقتين كال استخدام

Page 13: 8 memory managment & pointers

04/13/2023 11:49 PM 13

ضمن هادم تابع عن التصريحالصف:

قبل من الغرض هدم قبل التنظيف بعملية للقيام المناسب المكان هو الهادمGC.

فيc. ++i فورا الغرض هدم عند الهادم استدعاء يتم في على# Cأما نعتمد استدعاء GCفأننا سيتم متى نعرف ال السبب لهذا

طريق عن الغرض وتحرير .GCالهادم الهادم كود إضافي يبطئتنفيذ كود وجود بسبب الذاكرة تحرير عملية من

قبل من استدعاءه يتم الذاكرة .GCللهادم من i فعليا الغضر هدم قبل

class Myclass { ~Myclass() { //Implementation for free Unmanaged Resources used Directly by an Object: Examples : // Closing connection To DB // Closing Opened Files // Closing Networking Connections } }

Page 14: 8 memory managment & pointers

04/13/2023 11:49 PM 14

الواجهة IDisposableاستخدامغير الموارد لتحرير مايكروسوفت قبل من بها الموصى الطريقة

.GC باستخدام المتعلقة المشاكل لتجنبالمKدارة . يلي كما الطريقة هذه تحقيق يمكننا

المنهج Dispose دقيق بتحكم يزودنا

class Myclass :IDisposable { public void Dispose() { //Implementation for free Unmanaged Resources used Directly by an Object: Examples : // Closing connection To DB // Closing Opened Files // Closing Networking Connections } }

Myclass a = new Myclass(); //Do Processing a.Dispose();

Page 15: 8 memory managment & pointers

04/13/2023 11:49 PM 15

من الم/دارة غير الموارد تحريرNET.قبل

: يلي كما هو اآلمن الحل المنهج استدعاء األشخاص .Disposeلكن لبعض i مربكا يكون قد التعليمة استخدام .usingيمكننا المنهج لهذا تلقائي استدعاء لنا تضمن التي

Myclass a=null; try { a= new Myclass(); //Do Processing } finally { if (a != null) a.Dispose(); }

using (Myclass a=new Myclass()) { //Do Processing }

Page 16: 8 memory managment & pointers

04/13/2023 11:49 PM 16

الطريقتين : كال استخدام الهادمتنفيذ( Destructor)

حتمية وغير بطيئة ولكنها أمنه آلية الواجهة IDisposableتحقيق

( استدعاء إضافي مجهود تتطلب لكنها حتمية آلية (Disposeالمنهج

السابقتين الطريقتين كال تحقيق هي األفضل الطريقة

Page 17: 8 memory managment & pointers

04/13/2023 11:49 PM 17

class Myclass :IDisposable { private bool isDisposed = false; public void Dispose() { //Implementation for free Unmanaged Resources used Directly by an Object: Examples : Console.WriteLine("Disposing"); Dispose(true); //Cleaning managed and unmanaged Resources //Requests that the system not call the finalizer(Destructor) for the specified object GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (!isDisposed) { if (disposing) { //Cleaning Magnaged objects by Calling Their Dispose() Methods ( Release Then Run GC) } //Cleaning Unmagnaged Resources } isDisposed = true; }

Page 18: 8 memory managment & pointers

04/13/2023 11:49 PM 18

الطريقتين : كال استخدام: المبرمجين من لنوعين يصلح الكود هذا

يكتب : األول

فيكتب : الثاني أما

~Myclass() { Dispose(false);//Cleaning Unmanaged Resources Console.WriteLine("Destructor"); } }

Myclass a=null; try { a= new Myclass(); //Do Processing } finally { if (a != null) a.Dispose(); }

{ Myclass a = new Myclass(); //Do Processing

}

Page 19: 8 memory managment & pointers

04/13/2023 11:49 PM 19

اآلمنة غير UnsafeالشيفرةCode

( استخدام الذاكرة إلى المباشر الوصول إلى األحيان بعض في نضطر قد: )i مثال مؤشرات

ملف في موجود تابع DLL دار غيرKم(Unmanaged DLL)) بلغة مكتوب C/C+ .التابع لهذا كبارمتر مؤشر تمرير يتطلب الوصول وهذا) +

. األداء تحسين

Page 20: 8 memory managment & pointers

04/13/2023 11:49 PM 20

آمنة غير شيفرة كتابة الكلمة .unsafeتقوم مؤشرات يستخدم المنهج هذا بأن المترجم تخبر والتي ال مع استخدامها .Class,structيمكن

عادي منهج ضمن اآلمنة غير الشيفرة من كتلة كتابة يم/كننا كما

unsafe int GetNumber() { //Code That can use Pointer int x = 10; int* px = &x; return 1; }

unsafe class Myclass { int* px ; //Declaration of a Pointer filed in a Class // Any Method in This Class Can now use Pointers }

static void Main(string[] args)

{

Unsafe int* px; // Wrong and Generate Compiler Error unsafe { //Unsafe Code That uses Pointers Here } //More safe Code That deose't use Pointers }