هل يمكن تخفيض مجموعة العمل من التطبيق المدارة عن طريق تفريغ المكتبات غير المدارة باستخدام AFXFreelibrary؟

StackOverflow https://stackoverflow.com/questions/213627

  •  03-07-2019
  •  | 
  •  

سؤال

لديّ تطبيق Windows المدير يقوم بتحميل مكون C ++ المدار يستخدم AFXLoadLibrary لتحميل مكون طرف ثالث إذا كان موجودًا على جهاز العميل. بمجرد اكتشافها ، أقوم بتفريغ المكون باستخدام AFXFreelibrary في محاولة لخفض مجموعة العمل من تطبيق الوالدين المدارة.

ناجحة الدعوة إلى AFXFreelibrary (تم التحقق منها باستخدام Explorer Process) ، ولكن لا يتم تحرير أي ذاكرة. هل هذا بسبب طبيعة التطبيق المدارة ، أم أن هناك طريقة لتحرير مساحة العملية هذه؟

لا أبحث عن طرق بديلة لمعالجة هذه المشكلة بشكل عام ، نظرًا لأن الكود قيد الإنتاج بالفعل ، بل أود معرفة ما إذا كان نهج التفريغ يستحق العناء.

هل كانت مفيدة؟

المحلول

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

إذا كان لدى DLL ذاكرة خاصة مخصصة للعملية ، فلا يمكن تبديلها ، فهذا أمر مهم وسيقلل من مجموعة العمل.

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

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top