के साथ प्रदर्शन प्रस्तुत करता है मैंने एक WPF नियंत्रण (फ्रेमवर्क एलिमेंट से विरासत) बनाया है जो एक टाइल किए गए ग्राफ़िक को प्रदर्शित करता है जिसे पैन किया जा सकता है। प्रत्येक टाइल 24bpp पर 256x256 पिक्सेल है। मैंने ऑनरेंडर को ओवरराइड कर दिया है। वहां, मैं किसी भी नई टाइल्स (बिटमैपफ्रेम के रूप में) लोड करता हूं, फिर DrawContext.DrawImage का उपयोग करके सभी दृश्यमान टाइल्स खींचता हूं।WPF बिटमैप स्रोत
अब, जब भी प्रति रेंडर चक्र के एक मुट्ठी भर नए टाइल से अधिक होते हैं, तो फ्रेमरेट लगभग एक सेकंड के लिए 60fps से शून्य तक गिर जाता है। यह छवियों को लोड करने के कारण नहीं होता है (जो मिलीसेकंड के क्रम में होता है), न ही DrawImage (जिसमें कोई समय नहीं लगता है, क्योंकि यह केवल कुछ इंटरमीडिएट डेटा संरचना प्रस्तुत करता है)।
मेरा अनुमान है कि जब भी यह बड़ी बिटमैप स्रोत उदाहरणों (यानी, जो पहले से ही कैश नहीं किया गया था) की बड़ी संख्या (~ 20) प्राप्त होती है तो रेंडर थ्रेड खुद को चोक करता है। या तो यह उन्हें कुछ आंतरिक डायरेक्टएक्स-संगत प्रारूप में परिवर्तित करने में बहुत समय व्यतीत करता है या यह एक कैशिंग समस्या हो सकती है। यह वीडियो रैम से बाहर नहीं हो सकता है; छिद्रक नीचे 60 एमबी पर चोटियों को दिखाता है, मेरे पास 256 एमबी है। इसके अलावा, छिद्रक कहते हैं कि सभी प्रस्तुत लक्ष्य हार्डवेयर-त्वरित होते हैं, इसलिए यह भी नहीं हो सकता है।
किसी भी अंतर्दृष्टि की सराहना की जाएगी!
अग्रिम
डैनियल
धन्यवाद@RandomEngy:
BitmapScalingMode.LowQuality समस्या एक छोटे से कम है, लेकिन यह से छुटकारा पाने के नहीं किया। मैं पहले से ही संकल्प पर टाइल्स लोड कर रहा हूं। और यह ग्राफिक्स ड्राइवर नहीं हो सकता है, जो अद्यतित है (एनवीडिया)।
मुझे यह जानने में थोड़ा आश्चर्य हुआ कि स्केलिंग में इतना समय लगता है। जिस तरह से मैंने इसे समझा, बिटमैप (इसके आकार के बावजूद) को केवल डायरेक्ट 3 डी बनावट और फिर हार्डवेयर-स्केल के रूप में लोड किया गया है। तथ्य के रूप में, पहली बार बिटमैप को पहली बार प्रस्तुत किया गया है, मैं बिना किसी और फ्रीज के अपने घूर्णन और स्केल को बदल सकता हूं।