فهم ومنع تسرب الذاكرة في دلفي

click fraud protection

دلفيدعم البرمجة الشيئية غني وقوي. تسمح الفئات والكائنات ببرمجة كود معياري. إلى جانب المكونات النموذجية والأكثر تعقيدًا ، تصبح أكثر تعقيدًا وتعقيدًا البق.

أثناء التطوير التطبيقات في دلفي هو دائمًا ممتع (تقريبًا) ، هناك حالات تشعر فيها أن العالم كله ضدك.

عندما تحتاج إلى استخدام (إنشاء) كائن في دلفي ، تحتاج إلى تحرير الذاكرة التي استهلكتها (مرة واحدة لم تعد هناك حاجة إليها). بالتأكيد ، يمكن أن تساعدك كتل حماية الذاكرة في النهاية / محاولة منع تسرب الذاكرة ؛ الأمر متروك لك لحماية التعليمات البرمجية الخاصة بك.

يحدث تسرب للذاكرة (أو المورد) عندما يفقد البرنامج القدرة على تحرير الذاكرة التي يستهلكها. يتسبب تسرب الذاكرة المتكرر في زيادة استخدام الذاكرة لعملية بدون حدود. تسرب الذاكرة مشكلة خطيرة - إذا كان لديك رمز يسبب تسرب للذاكرة ، في تطبيق قيد التشغيل 24/7 ، سوف يلتهم التطبيق كل الذاكرة المتاحة ويجعل الجهاز في النهاية يتوقف عن الاستجابة.

تسرب الذاكرة في دلفي

الخطوة الأولى لتجنب تسرب الذاكرة هي فهم كيفية حدوثها. فيما يلي مناقشة حول بعض المزالق الشائعة وأفضل الممارسات لكتابة كود دلفي غير المتسرب.

في معظم تطبيقات دلفي (البسيطة) ، حيث تستخدم المكونات (الأزرار ، المذكرات ، التعديلات ، إلخ) التي تسقطها على نموذج (في وقت التصميم) ، لا تحتاج إلى الاهتمام كثيرًا بإدارة الذاكرة. بمجرد وضع المكون في نموذج ، يصبح النموذج الخاص به

instagram viewer
صاحب وسيحرر الذاكرة المأخوذة من المكون بمجرد إغلاق النموذج (إتلاف). النموذج ، بصفته المالك ، مسؤول عن تخصيص الذاكرة للمكونات التي استضافتها. باختصار: يتم إنشاء المكونات الموجودة في النموذج وتدميرها تلقائيًا

أمثلة على تسرب الذاكرة

في أي تطبيق دلفي غير تافه ، ستحتاج إلى إنشاء مكونات دلفي في وقت التشغيل. ستحصل أيضًا على بعض فصولك المخصصة. لنفترض أن لديك فئة TDeveloper لديها طريقة DoProgram. الآن ، عندما تحتاج إلى استخدام فئة TDeveloper ، يمكنك إنشاء مثيل للفئة عن طريق استدعاء خلق طريقة (منشئ). يخصص الأسلوب Create ذاكرة لكائن جديد ويعيد مرجعًا إلى الكائن.

فار
زاركو: TDeveloper
ابدأ
zarko: = TMyObject. خلق؛
زاركو. DoProgram ؛
النهاية؛

وهنا تسرب بسيط للذاكرة!

كلما قمت بإنشاء كائن ، يجب التخلص من الذاكرة التي يشغلها. لتحرير ذاكرة كائن مخصص ، يجب استدعاء مجانا طريقة. وللتأكد تمامًا ، يجب عليك أيضًا استخدام الحظر / المحاولة نهائيًا:

فار
زاركو: TDeveloper
ابدأ
zarko: = TMyObject. خلق؛
محاولة
زاركو. DoProgram ؛
أخيرا
زاركو. مجانا؛
النهاية؛
النهاية؛

هذا مثال لتخصيص الذاكرة الآمنة ورمز إلغاء التخصيص.

بعض كلمات التحذير: إذا كنت تريد إنشاء مكون دلفي ديناميكيًا وتحريره بشكل صريح في وقت لاحق ، فمرر صفرًا دائمًا كمالك. يمكن أن يؤدي الفشل في القيام بذلك إلى مخاطر غير ضرورية ، بالإضافة إلى مشاكل الأداء وصيانة التعليمات البرمجية.

بالإضافة إلى إنشاء الكائنات وتدميرها باستخدام أساليب الإنشاء والحرة ، يجب أن تكون حذرًا للغاية عند استخدام الموارد "الخارجية" (الملفات وقواعد البيانات وما إلى ذلك).
لنفترض أنك بحاجة للعمل على بعض الملفات النصية. في سيناريو بسيط للغاية ، حيث يتم استخدام طريقة AssignFile لربط ملف على قرص بملف متغير عند الانتهاء من الملف ، يجب استدعاء CloseFile لتحرير مقبض الملف للبدء مستخدم. هذا هو المكان الذي لا يوجد فيه مكالمة صريحة إلى "مجاني".

فار
F: TextFile ؛
S: سلسلة ؛
ابدأ
AssignFile (F، 'c: \ somefile.txt') ؛
محاولة
Readln (F، S) ؛
أخيرا
ملف الإغلاق (F) ؛
النهاية؛
النهاية؛

مثال آخر يتضمن تحميل ملفات DLL الخارجية من التعليمات البرمجية الخاصة بك. عندما تستخدم LoadLibrary ، يجب عليك الاتصال بـ FreeLibrary:

فار
dllHandle: ثاندل ؛
ابدأ
dllHandle: = Loadlibrary ('MyLibrary. DLL ') ؛
// افعل شيئًا مع ملف DLL هذا
إذا كان dllHandle <> 0 ثم FreeLibrary (dllHandle) ؛
النهاية؛

تسرب الذاكرة في .NET؟

على الرغم من أن Delphi for .NET يقوم جامع البيانات المهملة (GC) بإدارة معظم مهام الذاكرة ، فمن الممكن وجود تسرب للذاكرة في تطبيقات .NET. إليك مناقشة المقالة GC في دلفي ل. NET.

كيفية مكافحة تسرب الذاكرة

إلى جانب كتابة كود معياري آمن للذاكرة ، يمكن منع حدوث تسرب للذاكرة باستخدام بعض أدوات الطرف الثالث المتاحة. دلفي أدوات إصلاح تسرب الذاكرة تساعدك على التقاط تطبيق دلفي الأخطاء مثل تلف الذاكرة وتسريبات الذاكرة وأخطاء تخصيص الذاكرة وأخطاء التهيئة المتغيرة وتعارضات التعريف المتغيرة وأخطاء المؤشر والمزيد.

instagram story viewer