التحقّق من استخدام الذاكرة باستخدام Unreal Engine

يمثّل 'anonymous RSS + swap' ضغط الذاكرة في عملية معيّنة، وهو مقياس مهم للحفاظ على ثبات اللعبة. ويُستخدَم كعتبة للحدّ الأقصى للذاكرة في أداة تحديد الذاكرة (Android 17 والإصدارات الأحدث) وكقيمة مرجعية عادية لمقياس "مؤشرات الذاكرة الحيوية" في Google Play Console.

يصعب قياس استخدام الذاكرة الذي يطابق تمامًا "**anonymous RSS + swap** " إما في وقت التشغيل أو بشكل ثابت في Unreal Engine.

لتتبُّع استخدام الذاكرة، يوفّر Unreal Engine المقياس VmRSS + VmSwap. على الرغم من أنّه أوسع من "**anonymous RSS + swap** " لأنّ VmRSS يتضمّن rssFile وrssShmem، فإنّه يظلّ تقديرًا موثوقًا به.

اتّبِع هذه الإرشادات لتحليل استهلاك الذاكرة في لعبتك:

الاستعلام عن الذاكرة باستخدام واجهات برمجة تطبيقات C++‎

استخدِم واجهات برمجة تطبيقات C++‎ التالية للاستعلام عن مقاييس الذاكرة:

الاستعلام عن الذاكرة بشكل بسيط

استخدِم GetMemoryUsedFast للاستعلام عن الذاكرة بشكل بسيط. على أجهزة Android، تعرض هذه الطريقة مساحة الذاكرة المقدّرة من خلال تحليل حقول الذاكرة الضرورية فقط من /proc/self/status، بدلاً من قراءة الملف بالكامل.

إحصاءات مفصّلة عن الذاكرة

استخدِم GetStats للاستعلام عن إحصاءات مفصّلة عن ذاكرة النظام الأساسي. توفّر هذه الطريقة إحصاءات شاملة عن ذاكرة النظام الأساسي، وتعرض كلاً من FPlatformMemoryStats.UsedPhysical وFPlatformMemoryStats.RssFile. بما أنّ UsedPhysical هو مجموع VmRSS وVmSwap، يمكنك الاقتراب من القيمة المرجعية من خلال طرح RssFile منها.

#include "HAL/PlatformMemory.h"

uint64 GetEstimatedPhysicalMemory()
{
  FPlatformMemoryStats Stats = FPlatformMemory::GetStats();

#if PLATFORM_ANDROID
    return Stats.UsedPhysical - Stats.RssFile;
#else
    return Stats.UsedPhysical;
#endif
}

مراقبة الذاكرة باستخدام أوامر وحدة التحكّم

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

الأمر الوصف
stat unit يعرض إجمالي استخدام الذاكرة الفعلية المجمّعة الحالية في صف Mem، ويتم تعديله كل إطار.
stat unitmax يعرض متوسط إجمالي استخدام الذاكرة الفعلية والافتراضية المجمّعة والحد الأقصى له في الجلسة في صف Mem.

تراكب وحدة إحصاءات Unreal Engine يعرض صف Mem.
الشكل 1 stat unit تراكب الذي يعرض Mem صف

تمثيل الذاكرة بصريًا باستخدام Unreal Insights

Unreal Insights يتيح لك مراقبة مقاييس الذاكرة وتمثيلها بصريًا، مثل إحصاءات ذاكرة النظام الأساسي والعدادات المخصّصة، بمرور الوقت باستخدام الرسوم البيانية للمخطط الزمني الدقيقة على مستوى الإطار.

  1. اربط جهازك بقنوات تتبُّع الذاكرة باستخدام العلامات التي تتضمّن default,counters لعرض الرسم البياني PlatformMemory/UsedPhysical (VmRSS + VmSwap) بجانب المخطط الزمني للإطار.
  2. اختياري: لتتبُّع مقاييس الذاكرة المخصّصة بمزيد من التفصيل، يمكنك الإعلان عن عدّاد تتبُّع مخصّص وتعديله باستخدام TRACE_DECLARE_MEMORY_COUNTER وTRACE_COUNTER_SET.
#include "ProfilingDebugging/CountersTrace.h"

TRACE_DECLARE_MEMORY_COUNTER(Trace_EstimatedPhysicalMemory, TEXT("Memory/EstimatedPhysicalMemory"));

void UpdateMemoryTraceCounter()
{
    // Note: Ensure GetEstimatedPhysicalMemory() is defined as shown
    // in the Query memory at runtime using C++ APIs section.
    TRACE_COUNTER_SET(Trace_EstimatedPhysicalMemory, GetEstimatedPhysicalMemory());
}

تعرض Unreal Insights الذاكرة/EstimatedPhysicalMemory.
الشكل 2 المخطط الزمني في Unreal Insights الذي يعرض العداد المخصّص Memory/EstimatedPhysicalMemory

التحقّق من استخدام الذاكرة بدقة باستخدام Perfetto

للتحقّق من القيم الدقيقة لنظام التشغيل Android 'anonymous RSS + swap' بدلاً من التقدير، استخدِم Perfetto. يلتقط Perfetto مقاييس الذاكرة على مستوى النظام لتقييم مساحة الذاكرة الدقيقة التي تشغلها لعبتك.

واجهة مستخدم Perfetto تعرض طلب البحث المجهول المصدر عن RSS والتبديل ومجموعهما
الشكل 3 واجهة مستخدِم Perfetto التي تعرض الاستعلام عن anonymous RSS وswap ومجموعهما