c# - Fastest way to put a smaller n-dimensional array in a bigger one (2d graphical analogy: paint rectangle on canvas) -
मेरे पास यह 10x5 सरणी है:
......... .................................................................................................. P> और यह 1x2 सरणी: एबी सीडी ईएफ अब मैं दूसरी सरणी को स्थिति 1/2 (एक्स -पोज / वाई-पॉज़), सभी पुरानी मूल्यों को हटाना (मेरा उदाहरण शून्य आधारित और amp; शामिल है)। परिणाम होगा:
.......... .......... एबी ........ सीडी ...... एएफ ....... एक ज्ञात अधिलेखित पदानुक्रम के साथ कई उप एरेज़ हो सकते हैं, सरणियों में 3 से अधिक आयाम हो सकते हैं और एरेज़ जटिल वस्तुओं।
क्या सी # में ऐसा करने के लिए एक सर्वोत्तम अभ्यास है?
क्या भाषा अज्ञेयवादी समाधान है?
ठीक है, बफ़र। ब्लॉककॉपी बाइट-बाय-बाइट डेटा को कॉपी करने से काफी तेज है, यहां तक कि आप सीमा जांच को समाप्त करने के बाद भी। दिलचस्प बात यह है ऐसा लगता है कि Buffer.BlockCopy 2 डी सरणियों पर तथ्य काम में करता है:) आप कुछ इस तरह का प्रयास करना चाहें तो:
<कोड > बाइट [,] स्रोत = नया बाइट [1000, 100]; बाइट [,] dest = नया बाइट [2048, 2048]; इंट ऑफसेटएक्स = 100; इंट ऑफसेट वाई = 20; Int width = source.GetLength (0); Int height = source.GetLength (1); (; पि & LT; ऊंचाई; पि ++ पूर्णांक y = 0) {Buffer.BlockCopy (स्रोत, y * ऊंचाई, गंतव्य, offsetX + dest.GetLength (1) * (y + offsetY), चौड़ाई) के लिए; } असल में, यह सोचते हुए कि सरणी एक्स के साथ एक बाइट सरणी है, जो पहले सूचकांक के रूप में है, और वाई दूसरे के रूप में, मैं एक समय में एक पंक्ति जाती हूँ, पूरी पंक्ति को स्रोत से एक बार में एक बार।
यह एक बार में केवल एक बाइट की प्रतिलिपि बनाने से बहुत तेज लगता है, इसलिए मैं मानता हूं कि वास्तव में बाइट्स की प्रतिलिपि बनाने के लिए सीपीयू का उपयोग करने के बजाय डीएमए का उपयोग किया जाता है। > ध्यान दें कि यह केवल तेज़ हो जाएगा, यदि पंक्तियां पर्याप्त रूप से पर्याप्त हों यदि आप एक एकल कॉलम की प्रतिलिपि बना रहे हैं, तो संभवतः बाइट द्वारा बाइट की प्रतिलिपि बनाने की तुलना में धीमी हो जाएगी। यदि आप पाते हैं कि पंक्तियों (यानी। चौड़ाई आमतौर पर ऊंचाई से कम है) से स्तंभों को प्रतिलिपि बनाते हैं, तो आप निर्देशांक को उलटा करने के बारे में सोच सकते हैं एक्स और वाई गमागमन।
Comments
Post a Comment