أساسيات مجموعة البيانات المهملة

في the وقت تشغيل اللغة العامة (CLR), the حاوي المهملات serves كـ an تلقائي ذاكرة المدير. It provides the following benefits:

  • Enables you إلى develop your تطبيق without having إلى حر ذاكرة.

  • Allocates الكائنات تشغيل the مدارة كومة ذاكرة مؤقتة efficiently.

  • Reclaims الكائنات that are لا longer being used, clears their ذاكرة, و keeps the ذاكرة متوفر for future allocations. مدارة الكائنات automatically يحصل مسح محتوى إلى يبدأ مع, so their constructors do not have إلى يهيّئ every بيانات حقل.

  • Provides ذاكرة safety بواسطة making sure that an كائن cannot استخدم the محتوى of another كائن.

يشمل هذا الموضوع على الأقسام التالية.

  • شروط تجميع البيانات المهملة

  • The مدارة كومة ذاكرة مؤقتة

  • Generations

  • ما الذي يحدث أثناء تجميع البيانات المهملة

  • Manipulating Unmanaged موارد

  • Workstation و الخادم Garbage مجموعة

  • المتزامنة تجميع البيانات المهملة

  • خلفية تجميع البيانات المهملة

شروط تجميع البيانات المهملة

تجميع البيانات المهملة عند واحد الشروط التالية:

  • يكون لدى النظام انخفاض ذاكرة الفعلية.

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

  • GC.Collectأسلوب هو تسمى. في تقريبا الجميع الحالات، لم يكن إلى استدعاء هذا الأسلوب، لأن يعمل collecإلىr البيانات المهملة شكل مستمر. Th هو أسلوب هو أساسا يستخدم لمواقف فريدة واختبار.

العودة إلى الأعلى

The مدارة كومة ذاكرة مؤقتة

بعد يتم تهيئة قبل CLR، ويخصص collecإلىr البيانات المهملة مقطع الذاكرة إلى sإلىre وإدارة الكائنات. تسمى هذه ذاكرة في الكومة المدار، بعكس كومة ذاكرة مؤقتة أصلية في النظام تشغيل.

هناك هو مدارة كومة الذاكرة مؤقتة التي تمت إدارتها لكل عملية. الجميع عمليات جزئية في عملية يخصص الكائنات في كومة ذاكرة مؤقتة لنفسه.

إلى حجز ذاكرة، collecإلىr البيانات المهملة استدعاء Win32 الدالة VirtualAlloc ويحجز قطعة واحدة من ذاكرة في كل مرة للتطبيقات التي تمت إدارتها. collecإلىr البيانات المهملة سيتم أيضا حجز القطع حسب الحاجة وتحرير المقاطع مرة أخرى إلى النظام التشغيل (بعد مسح عليها أية الكائنات) بواسطة استدعاء Win32 VirtualFree دالة.

كائنات أقل تخصيصها في كومة ذاكرة مؤقتة، أقل العمل الذي يحتوي collecإلىr البيانات المهملة إلى القيام. عندما تقوم بيخصص الكائنات، قم بعدم إظهار إلى القيم التي تزيد عن احتياجاتك، مثل يخصص صفيفة من الوحدات البايت 32 عند الحاجة فقط 15 وحدات البايت.

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

intrusiveness (التردد ومدة) مجموعات البيانات المهملة هو نتيجة لوحدة التخزين من عمليات التخصيص ومقدار ذاكرة survived تشغيل الكومة المدار.

يمكن اعتبار كومة ذاكرة مؤقتة كـ تجميع heaps الثاني: كبيرة كائن كومة ذاكرة مؤقتة والصغير كائن كومة ذاكرة مؤقتة.

كومة ذاكرة مؤقتة لكائن كبير يحتوي على الكائنات 85,000 وحدات البايت وأكبر. كبير جداً كائن s على قطر أيمن متوسط كائن كومة ذاكرة مؤقتة عادة عبارة عن صفائف. هو نادرة لكائن مثيل أن تكون قطر أيمن متوسط جداً.

العودة إلى الأعلى

Generations

كومة ذاكرة مؤقتة هو تنظيم generations حتى أنه يمكن معالجة الكائنات long-lived وقصيرة الأجل. تجميع البيانات المهملة تحدث أساسا باستخراج الكائنات قصير الأجل التي تشغل جزء مربع متوسط فقط من كومة ذاكرة مؤقتة عادة ما. هناك ثلاثة generations الكائنات في كومة ذاكرة مؤقتة:

  • توليد 0

    هذا هو الجيل youngest و يحتوي على الكائنات قصير الأجل. مثال لكائن قصير الأجل هو متغير مؤقت. تجميع البيانات المهملة تحدث بكثرة في هذا الجيل.

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

    تم استخلاص عن معظم الكائنات ل تجميع البيانات المهملة في توليد 0 survive لا للجيل التالي.

  • توليد 1

    هذا الجيل يحتوي على كائنات قصير الأجل ويخدم كـ مخزن مؤقت بين الكائنات قصير الأجل والكائنات long-lived.

  • توليد 2

    يتضمن هذا إنشاء الكائنات long-lived. مثال لكائن long-lived هو كائن في تطبيق خادم الذي يحتوي على بيانات ثابتة وغير المباشرة لمدة العملية.

تحدث مجموعات البيانات المهملة تشغيل generations محددة كـ شروط warrant. إنشاء تجميع يعني تجميع الكائنات في ذلك إنشاء و كافة generations الصغار الخاص به. توليد 2 تجميع البيانات المهملة كان يعرف أيضا باسم كامل تجميع البيانات المهملة، لأن ذلك reclaims الجميع الكائنات الموجودة في الجميع generations (بمعنى، الجميع الكائنات الموجودة في الكومة المدار).

الأدوات الضرورية و العروض

تعرف الكائنات التي لم يتم استخلاص عن في تجميع البيانات المهملة كـ survivors، وستتم ترقية للجيل التالي. يتم ترقية الكائنات survive مجموعة البيانات المهملة الجيل 0 إلى توليد 1؛ تتم ترقية الكائنات survive مجموعة البيانات المهملة الجيل 1 إلى توليد 2؛ و تبقى الكائنات survive مجموعة البيانات المهملة الجيل 2 في توليد 2.

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

المؤقتة Generations والقطع

نظراً لأن الكائنات في generations 0 و 1 قصير الأجل، وتعرف هذه generations كـ generations المؤقتة.

يجب أن يتم تخصيص generations المؤقتة في مقطع ذاكرة الذي يعرف قطعة المؤقتة. كل قطعة جديدة تم الحصول عليه من قبل "أداة تجميع مجمعي البيانات المهملة يصبح المقطع المؤقتة الجديدة ويحتوي على الكائنات التي survived الجيل 0 تجميع البيانات المهملة. يصبح المقطع المؤقتة القديمة المقطع جيل جديد 2.

يمكن أن يتضمن المقطع المؤقتة 2 لإنشاء الكائنات. يمكن استخدام الكائنات الجيل 2 مقاطع متعددة (ممكن كما كانت عملية تتطلب و يسمح ذاكرة).

مقدار ذاكرة freed من ephemeral تجميع البيانات المهملة يقتصر الحجم المقطع المؤقتة. مقدار ذاكرة التي هو تحرير هو نسبة إلى المساحة التي كانت مشغولة بالكائنات الأخير.

العودة إلى الأعلى

ما الذي يحدث أثناء تجميع البيانات المهملة

أ تجميع البيانات المهملة له المراحل التالية:

  • مرحلة العلامات يبحث عن الجميع الكائنات الحية و بوضع علامة عليها.

  • مرحلة relocating تحديث المراجع إلى الكائنات التي سوف تكون مضغوطة.

  • مرحلة ضغط التي reclaims مسافة مشغولة بالكائنات الأخير و ضغط surviving الكائنات. مرحلة ضغط نقل الكائنات التي تم survived تجميع البيانات المهملة تجاه إنهاء المقطع القديمة.

    لأنه يمكن أن تشغل الجيل 2 مجموعات مقاطع متعددة، يمكن نقل الكائنات التي يتم ترقية في توليد 2 في قطعة من قديمة. يمكن نقل كل من الجيل 1 و survivors الجيل 2 إلى مقطع آخر، حيث أنها تقوم بترقية إلى الجيل 2.

    كائن كبير كومة ذاكرة مؤقتة هو غير مضغوطة، لأن ذلك قد زيادة استخدام ذاكرة على مقدار الزمن غير مقبولة.

يستخدم collecإلىr البيانات المهملة المعلومات التالية إلى تحديد ما إذا كانت الكائنات مباشرة:

  • جذور مكدس الذاكرة المؤقتة

    تكديس متغيرات توفير بواسطة المترجم في نفس الوقت (JIT) و walker بنية تخزين العناصر.

  • تجميع البيانات المهملة المقابض

    هذه المعالجات الإشارة إلى إدارة الكائنات ويمكن تخصيصها برمز مستخدم أو بوقت تشغيل اللغة العامة.

  • ثابت البيانات

    ثابت البيانات في مجالات التطبيقات التي يمكن أن ترجع إلى الكائنات غير ذلك. يحتفظ مقطع صوتي للكائنات الخاصة بها ثابتة لكل مجال تطبيق.

قبل بدء تجميع البيانات المهملة، تكون الجميع عمليات جزئية التي تمت إدارتها معلق عدا مؤشر ترابط الذي يتم تشغيله في تجميع البيانات المهملة.

يبين المثال التالي ترابط أحداث تجميع البيانات المهملة تسبب عمليات جزئية الأخرى أن يتم إيقافها.

مؤشر ترابط تشغيل تجميع البيانات المهملة

العودة إلى الأعلى

Manipulating Unmanaged موارد

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

مستخدمو جهاز تتم إدارته كائن قد لا التخلص موارد الأصلية المستخدمة من قبل كائن. إلى إجراء التنظيف، يمكنك جعل كائن مدار الخاص بك finalizable. consهوts إنهاء إجراءات التنظيف التنفيذ عند الكائن هو لم تعد قيد استخدم. عند جهاز تتم إدارته كائن dies، يقوم بإجراء تنظيف الإجراءات المحددة في أسلوب أداة الإنهاء الخاص به.

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

العودة إلى الأعلى

Workstation و الخادم Garbage مجموعة

حاوي المهملات هو self-tuning ومن العمل في العديد من السيناريوهات. يمكنك تعيين خيار الوحيد هو النوع تجميع البيانات المهملة، بناء على الصفات المميزة لحمل العمل. يوفر CLR الأنواع التالية من تجميع البيانات المهملة:

  • تجميع البيانات المهملة محطة العمل، الذي هو لكافة محطات عمل العميل وأجهزة الكمبيوتر المستقلة. هذا هو إعداد الافتراضي ل عنصر <gcServer> في مخطط تكوين وقت التشغيل.

    محطة العمل تجميع البيانات المهملة يمكن أن تكون متزامنة أو غير المتزامن. يمكن تجميع البيانات المهملة المتزامنة من العمليات جزئية التي تمت إدارتها إلى متابعة العمليات أثناء تجميع البيانات المهملة.

    بدءاً من .NET Framework الإصدار 4، الخلفية تجميع البيانات المهملة يستبدل conncurrent تجميع البيانات المهملة.

  • تجميع البيانات المهملة الخادم، الذي هو المطلوبة لتطبيقات الملقم التي تحتاج إنتاجية عالية وقابلية للتغيير.

تظهر التوضيحات التالية مؤشرات ترابط المخصصة التي تقوم تجميع البيانات المهملة تشغيل الخادم.

الخادم تجميع البيانات المهملة

تكوين تجميع البيانات المهملة

يمكنك استخدام العنصر <gcServer> مخطط تكوين وقت التشغيل لتعيين النوع تجميع البيانات المهملة تريد CLR لتنفيذ. عند ترتيب هو لعنصر enabledالسمة هو معينة إلى false(the الافتراضي) ، CLR يقوم بتجميع البيانات المهملة محطة العمل. عند تعيين enabledالسمة إلى true، ينفذ CLR الخادم تجميع البيانات المهملة.

تجميع البيانات المهملة المتزامنة هو المحددة في العنصر <gcConcurrent> مخطط تكوين وقت التشغيل. The الافتراضي إعداد هو enabled. تجميع البيانات المهملة المتزامنة هو متوفراً فقط من أجل تجميع البيانات المهملة محطة العمل وليس له تأثير تشغيل خادم تجميع البيانات المهملة.

يمكنك أيضا تحديد الخادم تجميع البيانات المهملة بواجهات استضافة غير مدار. لاحظ أن ASP.NET Microsoft SQL Server 2005تمكين تجميع البيانات المهملة الملقم تلقائياً إذا تمت استضافة تطبيق الخاص بك داخل واحد هذه البيئات.

اعتبارات للمقارنة بين محطة العمل والملقم تجميع البيانات المهملة

محطة العمل تجميع البيانات المهملة على الأداء وترابط الاعتبارات التالية:

  • يحدث المجموعة على مؤشر الترابط مستخدم الذي تقوم بتشغيله تجميع البيانات المهملة ويبقى في الأفضلية نفسها. Because user threads typically run at normal priority, the garbage collector (which runs on a normal priority thread) must compete with غير ذلك threads for CPU time.

    عمليات جزئية التي تقوم بتشغيل تعليمات برمجية الأصلية غير معلق.

  • تجميع البيانات المهملة محطة العمل هو دائماً المستخدمة تشغيل كمبيوتر الذي يحتوي تشغيل معالج واحد فقط، بغض النظر عن إعداد <gcServer>. إذا قمت بتحديد ملقم تجميع البيانات المهملة، سيستخدم CLR محطة العمل تجميع البيانات المهملة مع معطّل التزامن.

الخادم تجميع البيانات المهملة على الأداء وترابط الاعتبارات التالية:

  • مجموعة يحدث تشغيل عدة مؤشرات ترابط المخصصة التي تعمل في THREAD_PRIORITY_HIGHEST priority level.

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

  • نظراً للعمل معا، مؤشرات ترابط متعددة لمجموعة البيانات المهملة خادم تجميع البيانات المهملة هو أسرع من تجميع البيانات المهملة محطة العمل تشغيل نفس وحدة التخزين المؤقت حجم.

  • الخادم تجميع البيانات المهملة غالباً على القطع بحجم بقعة صغيرة.

  • الخادم تجميع البيانات المهملة يمكن أن تكون الموارد بشكل كبير. تشغيل سبيل المثال، إذا كان لديك 12 العمليات التي يتم تشغيلها تشغيل جهاز كمبيوتر يحتوي تشغيل 4 معالجات، سيكون هناك 48 مخصص تجميع البيانات المهملة عمليات جزئية إذا كانت الجميع استخدام الخادم تجميع البيانات المهملة. عالي على ذاكرة تحميل في الموقف، في حالة يبدأ الجميع معالجات بتنفيذ تجميع البيانات المهملة، سيكون حاوي المهملات 48 عمليات جزئية لجدولة.

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

العودة إلى الأعلى

المتزامنة تجميع البيانات المهملة

في تجميع البيانات المهملة محطة العمل، يمكنك تمكين مجموعة البيانات المهملة المتزامنة، والذي يسمح لمؤشرات الترابط إلى تشغيلها بشكل متزامن مع مؤشر ترابط مخصص يقوم بتنفيذ مجموعة البيانات المهملة لمعظم مدة لمجموعة البيانات المهملة. يؤثر هذا خيار على مجموعات البيانات المهملة فقط في توليد 2؛ generations 0 و 1 دائماً غير المتزامن لأنه يتم إنهاء سريع جداً.

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

إلى تحسين الأداء عندما تقوم بتشغيل عمليات متعددة، قم بتعطيل تجميع البيانات المهملة المتزامنة.

تجميع البيانات المهملة المتزامنة هو تنفيذها تشغيل مؤشر ترابط مخصص. افتراضياً، تعمل CLR محطة تجميع البيانات المهملة بتجميع البيانات المهملة المتزامنة ممكّن. Th هو هو صحيح لأجهزة كمبيوتر متعدد المعالجات ومعالج فردي.

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

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

يبين المثال التالي المتزامنة تجميع البيانات المهملة تنفيذها تشغيل مؤشر ترابط منفصل مخصص.

البيانات المهملة المتزامنة مجموعة

العودة إلى الأعلى

خلفية تجميع البيانات المهملة

يتم جمع generations المؤقتة (0 و 1) في تجميع البيانات المهملة الخلفية، كما المطلوبة أثناء مجموعة توليد 2 هو قيد التقدم. هناك هو لا الإعداد من أجل تجميع البيانات المهملة الخلفية؛ هو ممكن تلقائياً بتجميع البيانات المهملة المتزامنة. تجميع البيانات المهملة في الخلفية هو بديلاً لمجموعة البيانات المهملة المتزامنة. كما يقوم بتجميع البيانات المهملة المتزامنة، الخلفية تجميع البيانات المهملة هو تنفيذها تشغيل مؤشر ترابط مخصصة و هو قابلة للتطبيق فقط تشغيل مجموعات الجيل 2.

ملاحظةملاحظة

تجميع البيانات المهملة في الخلفية هو متوفرة فقط في .NET Framework 4والإصدارات الأحدث.

مجموعة تشغيل generations المؤقتة أثناء تجميع البيانات المهملة الخلفية هو تعرف تشغيل أنها مجموعة البيانات المهملة مقدمة. عند حدوث مجموعات البيانات المهملة المقدمة، يتم تعطيل الجميع عمليات جزئية التي تمت إدارتها مؤقتاً.

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

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

خلفية تجميع البيانات المهملة غير متوفر حاليا للخادم تجميع البيانات المهملة.

يبين المثال التالي مجموعة البيانات المهملة الخلفية مع واحد المقدمة البيانات المهملة مجموعة الحدوث.

تجميع البيانات المهملة الخلفية

العودة إلى الأعلى

راجع أيضًا:

موارد أخرى

تجميع البيانات المهملة.