मैं एक विंडोज फोन 7 एक्सएनए गेम पर काम कर रहा हूं। यह सी ++ में लिखे गए गेम का एक बंदरगाह है, और इस तरह, मैं जितना संभव हो गेमप्ले कोड के छोटे पुनर्लेखन के रूप में करने की कोशिश कर रहा हूं। क्योंकि कलेक्टर nongenerational और धीमी गति से है, इसलिए एक संग्रह (जो प्रत्येक 1 MB शुरू हो रहा है) 10ms के बारे में आवंटन के प्रति MB लेताWP7 सी #/XNA में उत्परिवर्तनीय तार?
कचरा, एक विशाल WP7 पर समस्या है। मैं पूरी तरह से अधिकतम 9 0 एमबी उपलब्ध कराने का इरादा रखता हूं, इसलिए हम आवंटन के प्रत्येक एमबी में ~ 900 एमएमएस स्टॉल देख रहे हैं।
मैं चीजों को फिर से काम करने में सक्षम हूं ताकि हमारे पास स्ट्रिंग के कुछ मामलों को छोड़कर प्रति फ्रेम उत्पन्न कचरा न हो।
ऐसा लगता है कि स्ट्रिंगबिल्डर। टॉस्ट्रिंग() कचरा उत्पन्न करता है, और here वर्णित विधि WP7 पर काम नहीं करती है।
दो बातें मैं क्या करने की जरूरत हैं:
- स्वरूप मिनट/सेकंड/मिमी के रूप में hundreths: स्क्रीन पर प्रदर्शित करने के लिए ss.hh। जाहिर है, मैं स्ट्रिंगबिल्डर के साथ ऐसा कर सकता हूं (एक्सटेंशन विधियों का उपयोग करना जो मुक्केबाजी से कचरे से कचरा नहीं बनाते हैं) और स्ट्रिंगबिल्डर को सीधे स्प्राइटबैच के साथ प्रदर्शित करते हैं।
- 'foo.bar.baz.qux "फ़ॉर्म की एक स्ट्रिंग को'। ', यानी {" foo "," bar "," baz "," qux "} पर एक सरणी में विभाजित करें और एक तत्व को कॉपी करें तारों की एक सरणी में समय। यह गेम अभिनेताओं की पदानुक्रमिक स्थिति स्थापित करने के लिए है। यह मूल गेम से सीधे बहुत अधिक पोर्ट किया गया है, और इस तरह से काम करने पर काफी निर्भर करता है। मैं वास्तव में इसे फिर से लिखना टालना चाहूंगा।
स्ट्रिंग के बजाय char [] का उपयोग करने के लिए बहुत सारे कोड को कनवर्ट करने का छोटा, क्या सी # में वास्तव में कचरा मुक्त म्यूटेबल तारों का कोई तरीका है?
बस एक साइड नोट आम में पीढ़ी जीसी है http://blogs.msdn.com/b/abhinaba/archive/2011/04/13/generational-gc-in-windows-phone-mango.aspx – Terrance
यह भी है mutable तारों के लिए कुछ "करीब" बनाने का एक तरीका http://stackoverflow.com/questions/6913435/how-to-get-a-list-of-mutable-strings – Terrance