كيفية تنفيذ عرض تمرير كبير جدًا في الكاكاو
-
06-07-2019 - |
سؤال
هل من الحكمة إنشاء وجهات نظر في الكاكاو لها أبعاد حوالي 15000 بكسل؟ (بالطبع جزء صغير فقط من هذا الرأي سيكون مرئيًا في وقت واحد في أ NSScrollView
)
الحد الأقصى للواجهة باني 10000 بكسل في الحجم. هل هذا قيود اصطناعية أم أن هناك سبب وجيه وراءه؟
هل يجب أن أخلق رؤية ضخمة وأدع NSScrollView
/Quartz قلق بشأن تقديمه بكفاءة (يتم رسم وجهة نظري برمجيًا داخل المنطقة المطلوبة في drawRect
) أو هل أخاطر باستخدام الذاكرة المفرطة والمشاكل الأخرى؟ (على سبيل المثال ، هل يمكن أن يحاول نظام التشغيل OS X ذاكرة التخزين المؤقت لنقطة View بأكملها في ذاكرة الفيديو في أي وقت؟)
المحلول
لا تحتوي وجهات النظر على متاجر دعم ، إلا إذا كانت مدعومة بالطبقة. النافذة هي ما يحتوي على متجر الدعم ، وبالتالي فإن كمية الذاكرة المستخدمة لعرض العرض تقتصر على حجم النافذة.
لذلك فإن الجواب هو نعم. المضي قدما وجعل آرائك كبيرة كما تريد.
(بالطبع ، سترغب في الحد من الرسم الذي تقوم به في عرض المستقيم الذي تم تمريره drawRect:
أو ستفقد الكثير من الوقت في القيام برسم غير مرئي.)
نصائح أخرى
حسنًا ، إذا حاولت الكاكاو تخزين النظرة بأكملها في الذاكرة ، فستكون هذه مشكلة:
10000 * 10000 = 100,000,000
* 4 = 400,000,000
هذا هو 400 ميغابايت في بكسل RGBA RAW واحد رأي. إذا كنا نريد أن نكون متشائمين حقًا ، افترض أن NSVIEW تعرض مزدوجًا لك ، وفي هذه الحالة يتضاعف استخدام الذاكرة إلى 800 ميغابايت.
في أسوأ حالات ، يقوم المستخدم بتشغيل تطبيقك على جهاز Mac Mini القديم مع ذاكرة وصول عشوائي 1 جيجابايت - والتي استخدمتها للتو 80 ٪. سيبدأ النظام بالتأكيد في الترحيل قبل هذه النقطة ، مما يجعل نظامه بطيئًا بشكل لا يطاق.
من ناحية أخرى ، إنها أسهل طريقة لتنفيذها والتي يمكنني التفكير فيها ، لذلك أقول جربها ومعرفة ما يقوله شاشة النشاط حول استخدام ذاكرتك. إذا كانت عالية جدًا ، فحاول تغيير الخيارات المختلفة لعرض التمرير وعرض المقطع ؛ إذا لم ينجح ذلك ، فلا يمكنني التفكير في أي شيء آخر سوى جعل التمرير الخاص بك وتزييفه.