8 memory managment & pointers
-
Upload
mohammad-alyan -
Category
Documents
-
view
393 -
download
1
Transcript of 8 memory managment & pointers
![Page 1: 8 memory managment & pointers](https://reader035.fdocuments.in/reader035/viewer/2022080211/559034e81a28abff2c8b46b5/html5/thumbnails/1.jpg)
Advanced C# Course
8- Memory management and Pointers
![Page 2: 8 memory managment & pointers](https://reader035.fdocuments.in/reader035/viewer/2022080211/559034e81a28abff2c8b46b5/html5/thumbnails/2.jpg)
04/13/2023 11:49 PM 2
Outlines مقدمة المجهر تحت الذاكرة إدارة القيمة Value Typeأنواع المرجع Reference Typeأنواع النفايات Garbage Collectorجامع. قبل من الم/دارة غير الموارد NETتحرير اآلمنة غير Unsafe Codeالشيفرة
![Page 3: 8 memory managment & pointers](https://reader035.fdocuments.in/reader035/viewer/2022080211/559034e81a28abff2c8b46b5/html5/thumbnails/3.jpg)
04/13/2023 11:49 PM 3
مقدمة تؤمن.NET ( الم/دارة بالشيفرة /سمى ي ما وهذه( Managed Codeلنا
/عرف ي ما خالل من الذاكرة مع مباشر بشكل التعامل علينا تحظر الشيفرة(. Reference )بالمرجع
المناطق ضمن الذاكري الحجز كيفية إلى عميقة معرفة إلى نحتاج قدHeap , Stack.
. النفايات جامع عمل آلية قواعد اتصاالت أو المفتوحة الملفات مثل م/دارة الغير الموارد تحرير كيفية
المفتوحة . المعطيات لغة في المؤشرات استخدام # .Cكيفية
![Page 4: 8 memory managment & pointers](https://reader035.fdocuments.in/reader035/viewer/2022080211/559034e81a28abff2c8b46b5/html5/thumbnails/4.jpg)
04/13/2023 11:49 PM 4
المجهر تحت الذاكرة إدارة منصة تحت تعمل التي اللغات مزايا أهم /تعب #Cمثل NET.من ت ال أنها
وتحريرها . األغراض حجز وكيفية الذاكرة إدارة تفاصيل في المبرمج النفايات تحرير ( Collector Garbage )جامع عناء المبرمج على يوفر
الذاكرة في البرنامج ق_ب̂ل من المحجوزة المناطق المرجع وأنواع القيمة أنواع بين الفرق عن سنتكلم
Reference Data Type Vs Value Data Type
![Page 5: 8 memory managment & pointers](https://reader035.fdocuments.in/reader035/viewer/2022080211/559034e81a28abff2c8b46b5/html5/thumbnails/5.jpg)
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](https://reader035.fdocuments.in/reader035/viewer/2022080211/559034e81a28abff2c8b46b5/html5/thumbnails/6.jpg)
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](https://reader035.fdocuments.in/reader035/viewer/2022080211/559034e81a28abff2c8b46b5/html5/thumbnails/7.jpg)
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](https://reader035.fdocuments.in/reader035/viewer/2022080211/559034e81a28abff2c8b46b5/html5/thumbnails/8.jpg)
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](https://reader035.fdocuments.in/reader035/viewer/2022080211/559034e81a28abff2c8b46b5/html5/thumbnails/9.jpg)
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](https://reader035.fdocuments.in/reader035/viewer/2022080211/559034e81a28abff2c8b46b5/html5/thumbnails/10.jpg)
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](https://reader035.fdocuments.in/reader035/viewer/2022080211/559034e81a28abff2c8b46b5/html5/thumbnails/11.jpg)
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](https://reader035.fdocuments.in/reader035/viewer/2022080211/559034e81a28abff2c8b46b5/html5/thumbnails/12.jpg)
04/13/2023 11:49 PM 12
من الم/دارة غير الموارد تحريرNET.قبل
GC . المحجوزة الذاكرة تحرير عناء من المبرمج يريح لكنGC. م/دارة الغير الموارد بتحرير تقوم كيف تعرف ال( معين صف لدينا يكون لكي( . Classعندما م/دار غير غرض إلى مرجع يحوي
الم/دارة ) غير الموارد بتحرير نقوم قبل( Unmanaged Resourcesنجعل . الذاكرة من الغرض إزالة
طريقتانلدينا: ( هادم تابع عن بالتصريح ( Destructor or Finalizer Methodنقوم
الصف ضمن الواجهة IDisposableاستخدام. الطريقتين كال استخدام
![Page 13: 8 memory managment & pointers](https://reader035.fdocuments.in/reader035/viewer/2022080211/559034e81a28abff2c8b46b5/html5/thumbnails/13.jpg)
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](https://reader035.fdocuments.in/reader035/viewer/2022080211/559034e81a28abff2c8b46b5/html5/thumbnails/14.jpg)
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](https://reader035.fdocuments.in/reader035/viewer/2022080211/559034e81a28abff2c8b46b5/html5/thumbnails/15.jpg)
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](https://reader035.fdocuments.in/reader035/viewer/2022080211/559034e81a28abff2c8b46b5/html5/thumbnails/16.jpg)
04/13/2023 11:49 PM 16
الطريقتين : كال استخدام الهادمتنفيذ( Destructor)
حتمية وغير بطيئة ولكنها أمنه آلية الواجهة IDisposableتحقيق
( استدعاء إضافي مجهود تتطلب لكنها حتمية آلية (Disposeالمنهج
السابقتين الطريقتين كال تحقيق هي األفضل الطريقة
![Page 17: 8 memory managment & pointers](https://reader035.fdocuments.in/reader035/viewer/2022080211/559034e81a28abff2c8b46b5/html5/thumbnails/17.jpg)
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](https://reader035.fdocuments.in/reader035/viewer/2022080211/559034e81a28abff2c8b46b5/html5/thumbnails/18.jpg)
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](https://reader035.fdocuments.in/reader035/viewer/2022080211/559034e81a28abff2c8b46b5/html5/thumbnails/19.jpg)
04/13/2023 11:49 PM 19
اآلمنة غير UnsafeالشيفرةCode
( استخدام الذاكرة إلى المباشر الوصول إلى األحيان بعض في نضطر قد: )i مثال مؤشرات
ملف في موجود تابع DLL دار غيرKم(Unmanaged DLL)) بلغة مكتوب C/C+ .التابع لهذا كبارمتر مؤشر تمرير يتطلب الوصول وهذا) +
. األداء تحسين
![Page 20: 8 memory managment & pointers](https://reader035.fdocuments.in/reader035/viewer/2022080211/559034e81a28abff2c8b46b5/html5/thumbnails/20.jpg)
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 }