تعد خصائص استخدام الذاكرة الخاصة بالتطبيق جانبًا أساسيًا من أدائه. يمكنك استخدام محلل النظام لتحليل هذه الخصائص من خلال الاطلاع على معلومات عدّاد وحدة معالجة الرسومات المتاح.
أجهزة Adreno
على أجهزة Adreno، ابدأ أولاً بتسليط الضوء على فترة زمنية تتفق مع إطار وحدة معالجة رسومات واحد كما هو موضَّح في تقدير أوقات معالجة وحدة المعالجة المركزية (CPU) وإطار وحدة معالجة الرسومات. استخدم الأسلوب الموضح في تلك الصفحة والذي يتعلق باستخدام استخدام النسبة المئوية لوحدة معالجة الرسومات أو مسار عدّاد مشابه لحدود وقت عرض اللقطة حيث يستخدم العدّاد أسلوب التوقيت نفسه ويتيح تقديرات أكثر دقة لاستخدام الذاكرة (مقارنةً باستخدام حدود وقت عرض اللقطة المستمدة من شرائح وحدة معالجة الرسومات التي يتم جمع بياناتها بشكلٍ مستقل عن بيانات المسار المقابل).
![مسار الاستخدام الذي تصطف على جانبيه العدّادات ذات الصلة أسفله](https://developer.android.com/static/images/agi/memory_efficiency-images/image1.png?authuser=6&hl=ar)
قراءة/كتابة إجمالي البيانات
عند تمييز إطار واحد في أداة التعريف، ابدأ بالنظر في عدّاد إجمالي القراءة (وحدات بايت في الثانية) وإجمالي عدد الكتابة (وحدات بايت/ثانية). توفر هذه العدادات نظرة عامة جيدة على مقدار البيانات التي تمر عبر ناقل الذاكرة على مدار إطار واحد. ابذل قصارى جهدك لتقليل مقدار البيانات التي ترسلها عبر الحافلة، نظرًا لأن معدل نقل البيانات للذاكرة مصدر كبير لاستنزاف طاقة البطارية على أجهزة الجوّال.
![إجمالي عدّادات القراءة والكتابة](https://developer.android.com/static/images/agi/memory_efficiency-images/image2.png?authuser=6&hl=ar)
يمكنك أيضًا فحص عدادي Vertex Memory Read (Byt/Second) وقراءة ذاكرة الهيئة (بايت/ثانية) لتحديد جزء معدل نقل البيانات المستخدم لبيانات الرأس والزخرفة.
![عدّادات قراءة ذاكرة الزخرفة مع Vertex](https://developer.android.com/static/images/agi/memory_efficiency-images/image3.png?authuser=6&hl=ar)
ما تعتبره "جيد" لهذه القيم يعتمد على نوع أعباء العمل الظاهرة في تطبيقك. على سبيل المثال، قد تشهد التطبيقات الثنائية الأبعاد كميات كبيرة نسبيًا (حوالي 2 غيغابايت/ثانية) من معدل نقل بيانات قراءة ذاكرة النسيج قيد الاستخدام، ولكن معدل نقل بيانات الذاكرة للرأس قد يكون ضئيلًا جدًا (حوالي 50 ميغابايت/ثانية). لمعرفة مزيد من التفاصيل، يمكنك الاطّلاع على مستندات تحليل النطاق الترددي للذاكرة رأسيًا وتحليل استخدام النطاق الترددي للذاكرة للهيكل.
أكشاك الجلب
اطّلع على عدّادات % Vertex Fetch Stall و% Texture Fetch Stall و% Stall على ذاكرة النظام لأنها ستقدِّم لك بعض التلميحات عن الأداء العام لتطبيقنا في الذاكرة. إذا كانت القيم أعلى من 5% تقريبًا، يعني ذلك أنّ تطبيقك لا يخطِّط للبيانات في الذاكرة بطريقة فعّالة، أو أنّه يصل إلى البيانات بطريقة فعّالة للاستفادة من ذاكرة التخزين المؤقت. يمكنك إلقاء نظرة على قسمَي تحليل النطاق الترددي للذاكرة في الأعلى وتحليل استخدام النطاق الترددي للذاكرة للحصول على تفاصيل حول تحسين استخدام الذاكرة لهذه الأنواع من مواد العرض.
![عدّادات Memory Stall](https://developer.android.com/static/images/agi/memory_efficiency-images/image4.png?authuser=6&hl=ar)
الأجهزة في مالي
على أجهزة مالي، ابدأ أولاً بتسليط الضوء على فترة زمنية متسقة مع إطار وحدة معالجة رسومات واحد كما هو موضح في تقدير أوقات معالجة وحدة المعالجة المركزية (CPU) وإطار وحدة معالجة الرسومات. استخدم الأسلوب الموضح في تلك الصفحة والذي يتعلق باستخدام استخدام النسبة المئوية لوحدة معالجة الرسومات أو مسار عدّاد مشابه لحدود وقت عرض اللقطة حيث يستخدم العدّاد أسلوب التوقيت نفسه ويتيح تقديرات أكثر دقة لاستخدام الذاكرة (مقارنةً باستخدام حدود وقت عرض اللقطة المستمدة من شرائح وحدة معالجة الرسومات التي يتم جمع بياناتها بشكلٍ مستقل عن بيانات المسار المقابل).
![مسار الاستخدام الذي تصطف على جانبيه العدادات التي تهمك أسفله](https://developer.android.com/static/images/agi/memory_efficiency-images/image5.png?authuser=6&hl=ar)
إجماليات النتائج الخارجية
بعد تمييز إطار واحد في أداة تحليل النظام، ابدأ من خلال الاطّلاع على عدّادات إخراج وحدات بايت القراءة الخارجية إخراج وحدات بايت الكتابة الخارجية. توفر هذه العدادات نظرة عامة جيدة على مقدار البيانات التي تمر عبر ناقل الذاكرة على مدار إطار واحد. ابذل قصارى جهدك لتقليل كمية البيانات التي ترسلها عبر الحافلة، نظرًا لأن النطاق الترددي للذاكرة يمثل مصدرًا كبيرًا لاستنفاد البطارية على الأجهزة المحمولة.
![إخراج مسارات العدّاد الخارجية](https://developer.android.com/static/images/agi/memory_efficiency-images/image6.png?authuser=6&hl=ar)
إدخال إجماليات داخلية
هناك أيضًا عدادات تزودك بمعلومات حول ذاكرات التخزين المؤقت ذاتها. تظهر في العدّادات التي تهتم بها "دورات توقُّف الإدخال الداخلية [read|write]". تعني القيم الأعلى لهذه القيَم أنّك تصل إلى ذاكرة التخزين المؤقت بنجاح ولكن يتم إرسال عدد كبير جدًا من طلبات القراءة، ونتيجةً لذلك، يتوقف رمز أداة التظليل عن الوصول إلى الذاكرة.
![إدخال مسارات العدّاد الداخلية](https://developer.android.com/static/images/agi/memory_efficiency-images/image7.png?authuser=6&hl=ar)
أكشاك الجلب
المجموعة التالية من العدادات التي يمكنك الاطلاع عليها هي Vertex Prefetcher Stall Cycles وعدّاد Texture Fetch Stall حيث ستمنحك بعض التلميحات عن الأداء العام للذاكرة لتطبيقنا. إذا كانت تظهر لك قيم أعلى من حوالى 5%، فهذا يعني أنك إما تخطيط بياناتنا في الذاكرة بطريقة فعالة أو الوصول إلى البيانات بطريقة فعالة للاستفادة من ذاكرة التخزين المؤقت. يمكنك إلقاء نظرة على مقالات "تحليل" [Vertex|Texture] لمعرفة تفاصيل حول كيفية تحسين استخدام الذاكرة لهذه الأنواع من مواد العرض.
![مسارات عدّاد استرجاع الأكشاك](https://developer.android.com/static/images/agi/memory_efficiency-images/image8.png?authuser=6&hl=ar)