2009-06-11 4 views
11

एक साधारण एक्सवाई लाइन ग्राफ: एक्स अक्ष संभावित रेटिंग प्रतिशत की पूरी श्रृंखला का प्रतिनिधित्व करेगा, 0% से एक छोर पर 100% पर। विशेष रूप से, एक्स मान हमारी रेटिंग कट ऑफ का प्रतिनिधित्व करेगा, या लेनदेन की न्यूनतम रेटिंग अब स्वीकार्य होने से पहले हो सकती है। वाई अक्ष 0 से मूल्यों को लेनदेन की कुल संख्या में दिखाएगा जो आने वाले हैं। वाई मान उन लेन-देन की कुल संख्या का प्रतिनिधित्व करेगा जिनके पास वर्तमान एक्स मान से अधिक रेटिंग है (या वर्तमान एक्स मान से अधिक या बराबर है, मैंने अभी तक निर्णय नहीं लिया है)। इस ग्राफ को पहली बार खींचा जाने पर कोई लेनदेन नहीं आएगा, इसलिए ग्राफ "y = 0x" से शुरू होगा।क्या WPF प्रदर्शन-संवेदनशील वातावरण में 300,000 अंकों के साथ एक लाइन पथ प्रस्तुत कर सकता है?

मान लें कि पहला लेनदेन 40% की रेटिंग के साथ आता है। लेनदेन की रेटिंग से संकेत मिलता है कि यदि हमारा रेटिंग कट ऑफ 40% से कम है तो यह लेनदेन स्वीकार्य है। (... या 40% से कम या बराबर। फिर से, मैंने अभी तक फैसला नहीं किया है)।

सबसे पहले, वाई अक्ष 0-1 की सीमा दिखाने के लिए पुन: सहेजा जाएगा (क्योंकि 1 लेनदेन की कुल संख्या है)। फिर लाइन को संशोधित करने के लिए संशोधित किया जाएगा कि 0 लेनदेन x = 40 या उससे अधिक स्वीकार्य हैं, और 1 लेनदेन x = 40 या उससे कम से स्वीकार्य है। लाइन पथ में दो अंक जोड़कर WPF में इसे पूरा करना आसान है - एक (40,0) और दूसरा (40,1) - और फिर लाइन के बाएं एंडपॉइंट को (0,1) पर ले जा रहा है। लाइन का दायां एंडपॉइंट (100,0) पर रहेगा। फिर इस प्रक्रिया को दूसरे लेनदेन के लिए दोहराया जा सकता है, और इसी तरह।

समस्या यह है कि हम छह अंकों की लेनदेन से निपटेंगे। और मैं यह सुनिश्चित करना चाहता हूं कि मैं WPF की हार्डवेयर त्वरित वेक्टर ड्राइंग क्षमताओं का उपयोग अपनी पूर्ण सीमा तक कर रहा हूं ताकि यह सुनिश्चित किया जा सके कि ग्राफ शेष प्रोग्राम को अंतराल या फ्रीज नहीं करता है क्योंकि यह 300,000 अंकों को एक लाइन पथ पर प्रस्तुत करने का प्रयास करता है। या क्या डब्ल्यूपीएफ दिल की धड़कन में ऐसी संख्याओं को संभालने में सक्षम होना चाहिए? मुझे एप्लिकेशन को धीमा करने के बिना इस ग्राफ को लागू करने का कोई तरीका ढूंढना होगा। मुझे विश्वास है कि डब्ल्यूपीएफ के वेक्टर ड्राइंग प्लेटफार्म एक समाधान प्रदान करेंगे, लेकिन मुझे यह सुनिश्चित करने के लिए डब्ल्यूपीएफ का शोषण करने के बारे में पर्याप्त जानकारी नहीं है कि मुझे डब्ल्यूपीएफ की उच्च प्रदर्शन प्रतिपादन क्षमताओं में से अधिकतर लाभ हो रहा है।

+1

मुझे पता है कि यह आप के लिए बाहर काम करता है के लिए एक और पोस्ट में भेजा। –

+0

यह एक पुराना सवाल है, लेकिन मुझे आश्चर्य है कि क्या आपको अपनी समस्या का समाधान मिला है? डब्ल्यूपीएफ में उच्च प्रदर्शन प्रतिपादन के साथ काफी समय व्यतीत करने के बाद, मुझे लगता है कि WPF प्राइमेटिव्स का उपयोग न करके उच्चतम प्रदर्शन हासिल किया जा सकता है, लेकिन WriteableBitmap API का उपयोग करके। वह या डायरेक्ट 2 डी। मैं आपके अनुभवों को किसी भी तरह से सुनना चाहता हूं। सबसे अच्छा संबंध है, –

उत्तर

11

मैं बस इस पोस्ट पर ठोकर खा रहा हूं और खुद को एक रेखा ग्राफ नियंत्रण का निर्माण कर रहा हूं जिसे बहुत ही प्रदर्शन करने की आवश्यकता है क्योंकि हम वास्तविक समय में हमारी लाइनों पर अंक अपडेट करते हैं।

तो प्रदर्शन और की संख्या दृश्य (ओं) मैं तुम्हें WPF के दृश्य परत के खिलाफ सीधे प्रोग्रामिंग (लिंक्स: 1, 2) की तुलना में अधिक performant दृष्टिकोण मिलेगा शक क्या आप के बाद कर रहे हैं ... । इस दृष्टिकोण का उपयोग करने से मेरे प्रारंभिक परिणाम बहुत सकारात्मक रहे हैं।

यह ऑनरेंडर को ओवरराइड करने से भी अधिक प्रदर्शनकारी होगा क्योंकि यह आपको डब्ल्यूपीएफ के बनाए रखा मोड ड्राइंग सबसिस्टम (जहां सभी ड्राइंग निर्देश कैश किए जाते हैं) का लाभ उठाने के लिए प्रोत्साहित करेंगे।

यही है, यदि आपको अपडेट करना है तो लाइन पर एक बिंदु है, तो बिंदु को अपडेट करने से लाइन को अद्यतन करने के लिए दृश्य को मजबूर कर दिया जाएगा, लेकिन बाकी ग्राफ (अक्ष, ग्रिडलाइन, ...) को मजबूर नहीं किया जाएगा। अपडेट करने के लिए ... क्योंकि इनके लिए ड्राइंग निर्देश बनाए रखा गया है और पुन: उपयोग किया जाएगा (क्योंकि वे अपडेट नहीं कर रहे हैं)।

अध्याय 14 Pro WPF in C# 2008 में मैथ्यू मैकडोनाल्ड द्वारा एक महान अनुभाग WPF के दृश्य परत के खिलाफ प्रोग्रामिंग पर ('विजुअल्स' शीर्षक से) है। WPF Control Development Unleashed का अध्याय 2 पृष्ठ 13 पर भी अनुभाग है जहां वह चर्चा करता है कि एक ड्राइंग विज़ुअल दृष्टिकोण चार्टिंग घटक के लिए कैसे सही होगा। अंत में, Charles Petzold ने एक एमएसडीएन पत्रिका article लिखा जहां स्कैटर प्लॉट का सबसे अच्छा समग्र समाधान एक ड्राइंग विज़ुअल दृष्टिकोण था।

(अब, मुझे पता है कि आपके प्रश्न का उल्लेख अक्षों का भी अपडेट होगा ... और इसलिए मेरा जवाब वास्तव में सामान्य मामले के लिए है ... लेकिन मुझे अभी भी लगता है कि यह दृष्टिकोण सबसे अधिक प्रदर्शनकारी होगा .. । के रूप में केवल चीजें हैं जो अद्यतन करने ... अपडेट करेगा की जरूरत है।)

+0

यह सही समझ में आता है, और इस दृष्टिकोण का एक सही विवरण है जिसे मैं वर्तमान में कोशिश कर रहा हूं। जून में जो ग्राफ मैं बना रहा था वह पॉल बेट्स के सुझाव का उपयोग करके डिजाइन किया गया था। लेकिन मैं हाल ही में एक और समान ग्राफ बना रहा हूं, और यह समाधान बहुत अच्छा काम करता प्रतीत होता है। मैं बस इतना ही संभव हूं कि ऑब्जेक्ट्स की सबसे छोटी संख्या (मेरे आईवाल्यू कनवर्टर में) अपडेट करें, और डब्ल्यूपीएफ दृश्य परत घटना के बिना बाकी को संभालने में सक्षम है। – Giffyguy

+0

अद्भुत! सुन के अच्छा लगा! – cplotts

+0

@ गीफ्यगुय: क्या आप अभी भी 300,000 डेटा पॉइंट्स प्रस्तुत कर रहे हैं या आपने उन्हें कम किया है? क्या ये डेटा एक स्क्रीन पर सभी दिखाई देते हैं या आपको स्क्रॉल करना है? –

1

यदि आप .NET 3.5 SP1 का उपयोग नहीं कर रहे हैं तो किसी भी शेडर प्रभाव का उपयोग न करें। अन्यथा यह सुनिश्चित करने के लिए isn't much you need to do एक WPF डेवलपर के रूप में यह सुनिश्चित करता है कि यह हार्डवेयर त्वरण का उपयोग करता है।

+4

ठीक है। लेकिन क्या यह वर्कलोड इसके लिए बहुत अधिक है? मेरा मतलब है कि, कई बिंदुओं के साथ एक मॉडल प्रस्तुत करना मेरे (कभी सीमित) मॉडलिंग और प्रतिपादन अनुभव में कभी भी देखा गया है। – Giffyguy

+4

मुझे लगता है कि मैं जो पूछ रहा हूं वह है: क्या मुझे लाइन पथ के साथ जाना चाहिए और लेनदेन के रूप में अंक जोड़ना चाहिए, या मुझे अभी तक एक और समाधान देखना चाहिए? – Giffyguy

+0

क्या आपका मतलब बिटमैप प्रभाव नहीं है? शेडर प्रभाव के बजाय? – cplotts

4

मुझे जवाब नहीं पता है, लेकिन एक त्वरित परीक्षण को कोड करने से आपके पोस्ट करने के लिए बहुत अधिक समय नहीं लेना चाहिए। इसके अलावा, एक समान चर्चा के लिए this thread देखें।

11

यदि आप इसे तेजी से करना चाहते हैं, तो सबसे अच्छा तरीका नियंत्रण से प्राप्त करना और ऑनरेंडर लागू करना है - आम तौर पर यह आवश्यक नहीं है, लेकिन आपके आवेदन के लिए यह हो सकता है।

इसके अलावा, चलो एक कदम पीछे ले जाएं - जिस स्क्रीन पर आप प्रतिपादन कर रहे हैं वह निश्चित रूप से 300k पिक्सेल नहीं है; प्रस्तुत करने से पहले, एन नोड्स औसत से बफर को कम करें जब तक कि आपके पास वास्तविक डिवाइस के संकल्प के करीब कुछ न हो, फिर इसे स्क्रीन पर खींचें।

+1

ऑनरेंडर कुछ दृष्टिकोणों से अधिक प्रदर्शनकारी हो सकता है ... लेकिन डब्लूपीएफ को तत्काल तरीके से ड्राइव करने की कोशिश करने के बारे में सावधान रहें (जो ऑनरेंडर ओवरराइड करने से आपको प्रोत्साहित कर सकता है) ... डब्ल्यूपीएफ एक बनाए रखा मोड संरचना प्रणाली है। मैं खुद ही ऐसा करके काटा गया है। डिवाइस के संकल्प के आधार पर लाइन पर बिंदुओं को कम करने के विचार के लिए – cplotts

+0

+1। बहुत अकलमंद। – cplotts

+0

डब्ल्यूपीएफ के साथ किसी भी चीज की तुलना में अंक की संख्या को कम करना है क्योंकि मेजबान को रद्द किया जा सकता है (ज़ूम इन/आउट) और दृश्यों के पास स्क्रीन पर उनके वास्तविक आकार को जानने का कोई तरीका नहीं है। –

4

WPF DynamicDataDisplay लाइब्रेरी पर एक नज़र डालने के लायक हो सकता है। मैं हाल ही में इसका उपयोग कर रहा हूं और बड़ी मात्रा में डेटा के साथ कोई समस्या नहीं है। यह केवल प्रारंभिक संस्करण है (वास्तव में 0.3) इसलिए बहुत अधिक दस्तावेज नहीं है, लेकिन इसमें नमूने दिखाते हैं कि इसका उपयोग कैसे किया जाए। उम्मीद है कि आपको शुरू करने के लिए पर्याप्त होगा।

सिमुलेशन नमूना बहुत सारे डेटा उत्पन्न करता है, ताकि शुरू करने के लिए यह एक अच्छी जगह हो।

+0

क्या आप जानते हैं कि डब्ल्यूपीएफ डायनामिकडेटा डिस्प्ले कैसे कार्यान्वित किया जाता है? क्या यह विजुअल का उपयोग करता है? –

+0

दिलचस्प, निश्चित रूप से। लेकिन अब तक ऐसा लगता है कि यह गतिशील प्रदर्शन के बजाय गतिशील डेटा के आसपास केंद्रित है। मुझे संदेह है कि यह डेटा निर्माता द्वारा डिजाइन किए गए कस्टम विजुअल आउटपुट के लिए बहुत अधिक उपयोग होगा। – Giffyguy

+0

उनके पास अलग-अलग ज़रूरतों के लिए अलग-अलग चार्ट प्रकार हैं। कुछ लोग डायरेक्टएक्स लाइन ग्राफ योगदान पर काम कर रहे हैं जो तेजी से होना चाहिए। उनके पास एक चार्ट है जो ड्रॉइंग कॉन्टेक्स्ट का उपयोग सीधे करता है जो अभी तक सबसे तेज़ है। कुछ भी जो रेटेंटिव सिस्टम का उपयोग करता है 300k अलग डेटापॉइंट्स (यदि आप उन्हें सभी प्रस्तुत करना चाहते हैं) के लिए बहुत धीमी हो जाएगी –

0

IMHO, पॉल, right मार्ग पर आ नक्शा समरेखण पर वर्गों की जाँच करने के लिए लगता है, उदाहरण के कुछ फ्लोरिडा 2000 के चुनाव से परिणाम का उपयोग डेटा सेट के लिए परिणाम (~ 9 एम वोट 18 + एम कुल लोग)।

AgileJon से धागे की रेखाओं के साथ, कुछ हद तक, मैं अपने डेटा सेट को बेहतर तरीके से जांचने के लिए कोई सीधी आगे तकनीक उपलब्ध नहीं होने पर मैन्युअल रूप से बिटमैप उत्सर्जित करता हूं। मैं स्कैटर प्लॉट्स के विज़ुअलाइजेशन प्रस्तुत करता हूं जो कि आसानी से 16 000 000 (16 मिलियन +) सेकेंड में हैं, पूर्ण 32 बिट एआरबीबी पैलेट।

आपको टिप्पणी की जाती है "लेकिन बिटमैप्स पर वापस जाने के पीछे एक विशाल कदम की तरह लगता है", मैं यह कहने में इतना तेज़ नहीं होगा कि ब्रह्मांड भौतिक सीमाओं से बंधे हैं।

मैं this codeproject लेख, कई 3 डी भूखंडों + एनीमेशन आदि हजारों की संख्या में करता है जो ...

संबंधित मुद्दे