سؤال

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

لقد حاولت استخدام SetProcessWorkingSetSize للحد من عملية "مجموعة العمل" ، لكنه لا يساعد عملية' مجموعة العمل يستمر في النمو على قيمة الحد الأقصى.

هل هناك طريقة أفضل للحد من عملية العمل ؟
هل يمكنني تغيير ويندوز' heuristcs عن ترحيل صفحات الذاكرة تعيين الملفات ؟

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

المحلول 2

وانتهى الأمر باستخدام القوة الغاشمة VirtualUnlock.

PROCESS_MEMORY_COUNTERS pmc;
if (GetProcessMemoryInfo( hProcess, &pmc, sizeof(pmc)) )
{
        if (pmc.WorkingSetSize > MaxWorkingSetSize)
        {
                VirtualUnlock(FilePtr.pData, MaxWorkingSetSize);
                UnmapViewOfFile(FilePtr.pData);
                CloseHandle(FilePtr.hFileMap);
                CloseHandle(FilePtr.hFile);
        }
}

نصائح أخرى

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

وهكذا، يبدو أن-mmap I عملية / O الخاص بك هو تجويع العملية الأخرى الخاصة بك التي تستخدم RAM أقل كثيرا. نهج واحد هو تأمين بحكمة الذاكرة في العملية التي يتم تجويع. انظروا VirtualLock ل Win32.

التحقق من جوابي هنا;مع VirtualUnlock() يمكنك يدويا uncommit أجزاء من MMFs;مثل أقسام لا أعتقد أن عليك أن تكون الحصول مرة أخرى قريبا.

أعتقد أن هذا السلوك يرجع إلى كيفية MMF (تعيين الذاكرة الملفات) العمل.إلقاء نظرة على هذا المادة بلوق.وهذا ما يفسر أن MMF الملفات تخطي Windows ترحيل العملية ، وبالتالي هي ليست مدعومة الصفحة الملف.بدلا من ذلك, MMF يصبح البيانات النسخ الاحتياطي في حد ذاته ، وهو ما يعني في نهاية المطاف فإنه يأخذ المزيد من ذاكرة الوصول العشوائي لأنه لا يجري الصفحات (إيه, أنا لست متأكدا من أنني على نفسي أفضل من قراءة بلوق!)

هنا وثائق MSDN على تعيين الذاكرة والملفات هنا آخر لذلك مسألة تتعلق MMF.

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