2011-05-26 19 views
24

मुझे एक डब्ल्यूपीएफ ऐप में समस्या का सामना करना पड़ रहा है जहां रेंडर थ्रेड रेंडरिंग बंद कर देता है, लेकिन यूआई थ्रेड और हेल्पर थ्रेड अभी भी संदेशों को पंप कर रहे हैं।डब्ल्यूपीएफ रेंडर थ्रेड हैं

प्रस्तुति फ़ॉन्ट कैश के भ्रष्टाचार से संबंधित प्रतीत होता है, हालांकि यह असंभव लगता है, क्योंकि ऐप रीबूट पर ठीक हो जाता है।

रेंडर थ्रेड कभी-कभी लटकता है, ड्राइंग अपडेट को रोकता है, लेकिन यूआई थ्रेड अभी भी संदेशों को पंप कर रहा है।

हम ने वही समस्या (here के समान) जो हुआ जब पैमाने एक TextBlock उस फ़ॉन्ट कैश हटाकर हल किया गया था करने के लिए बदलने को लागू करने को देखा है, लेकिन इस विशेष समस्या मज़बूती से दोहराने योग्य नहीं है।

इस समस्या के मूल कारण का निदान करने का सबसे अच्छा तरीका क्या है?

मैं connect पर माइक्रोसॉफ्ट के साथ खुला एक बग है, लेकिन जब तक वह अन्य लोगों को वोट ऊपर यह विचार नहीं किया जाएगा।

+0

मैंने इसी तरह के मुद्दों को देखा है और मुझे इस प्रश्न में भी रूचि है! –

+2

क्या कोई अर्ध-दोहराने योग्य उदाहरण है जो आप प्रदान कर सकते हैं? – tofutim

+0

दुर्भाग्य से नहीं, tofutim। हमने दो अलग-अलग मशीनों पर दो बार ऐसा किया है (जिसे हम जानते हैं)। स्टैक निशान भी सामान्य दिखाई देते हैं। – LukeN

उत्तर

5

फ्रीज एक होस्टेड सक्रिय नियंत्रण नियंत्रण वीडियो के कारण हुआ था।

नियंत्रण निर्देश का उपयोग करने के तरीके में रेस हालत थी जिसने डायरेक्टक्स को लटका दिया था।

हम एक प्रक्रिया डंप लेने procdump का उपयोग कर और फिर खिड़कियों debugger में डंप फ़ाइल खोलने के द्वारा इस समस्या को पाया।

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

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

+0

हाय, मुझे एक ही समस्या का सामना करना पड़ रहा है, क्या आप कृपया विस्तार से बता सकते हैं कि किस नियंत्रण ने आपको वास्तव में यह त्रुटि दी और आपने इसे मॉनिटर करने के लिए प्रसंस्करण का उपयोग कैसे किया? (आपने किस आदेश का उपयोग किया था?) धन्यवाद! –

+0

[चैनल 9] पर एक वीडियो है (http://channel9.msdn.com/Shows/Defrag-Tools/Defrag-Tools-9-ProcDump) जो आपको दिखाएगा कि इसका उपयोग कैसे करें। यदि आपने बहुत सी/सी ++ नहीं लिखा है तो मूल स्टैक फ्रेम की भावना बनाना अधिक कठिन होगा। विंडबग का उपयोग करने के तरीके पर सहायक: [धोखा शीट] (http://theartofdev.com/windbg-cheat-sheet/) और [लोडिंग .net] (http://mylittlereminder.wordpress.com/2011/07/08/ windbg-load-sos-in-windbg-0x80004005 /) – LukeN

+0

तो ... क्या आप फ्रीलांस काम कर रहे हैं? :) –

0

आप एक वॉचडॉग सेवा का उपयोग कर सकते हैं जो सेवा को हल करते समय कैश को साफ़ करता है। जब भी आपका आवेदन चल रहा हो, सेवा को आवधिक आधार पर मतदान करना होगा।

मैं यह स्वीकार करने वाला पहला व्यक्ति होगा कि यह एक उप-इष्टतम समाधान है और जब तक कि आप समय के केवल छोटे स्लाइस के लिए सेवा को चालू और बंद नहीं कर पा रहे हैं, तो आप बैटरी को जल्दी से निकालने की संभावना रखते हैं।

+0

मेरा प्रश्न यह नहीं है कि इस मुद्दे को कैसे हल किया जाए। मैं मूल कारण का निदान करने में मदद की तलाश में हूं। – LukeN

0

मुझे लगता है कि आपको लूपिंग पोल का उपयोग करना चाहिए जो सॉफ़्टवेयर चल रहा है या सॉफ़्टवेयर लटकने पर इसे रीसेट करता है।

+0

हाय पॉल, सवाल यह नहीं है कि इस मुद्दे को कैसे हल किया जाए। मैं मूल कारण ढूंढ रहा हूं। – LukeN

+0

@ luken plz मुझे अपना कोड दिखाएं मैं – Eljay

1

मुझे नहीं पता कि ऐसा क्यों होता है, लेकिन मैंने पहले इसका अनुभव किया है। इसे सिस्टम में देखना आसान है जो फ्रेमवर्क 4.0 को लक्षित करता है और पुरानी मशीनों (एक्सपी, विस्टा) पर चलता है।

क्या मैं हल करने के लिए किया था:

  1. हटाएँ FontCache3.0.0.0.dat
  2. हमलावर मशीन

समाधान 1 एक XP में काम किया पर फ़ॉन्ट कैश सेवा स्थायी रूप से अक्षम मशीन। यह एक विस्टा मशीन में भी काम करता था, लेकिन थोड़ी देर के बाद समस्या फिर से दिखाई देती है।

FontCache3.0.0.0.dat को हटाने के लिए आपको उस फ़ाइल को हटाने से पहले "विंडोज प्रेजेंटेशन फाउंडेशन फ़ॉन्ट कैश 3.0.0.0" सेवा को रोकने की आवश्यकता होगी। Vista में यह c: \ windows \ serviceprofiles \ localservice \ appdata \ local के अंतर्गत स्थित है। XP में यह c: \ windows \ system32 \ दस्तावेज़ों और सेटिंग्स \ localservice \ स्थानीय सेटिंग्स \ अनुप्रयोग डेटा के अंतर्गत है (मैंने कुछ फ़ोल्डर गलत तरीके से गलत लिखा होगा)

मुझे यह भी पता चला है कि सिस्टम को पूरी तरह से अक्षम करने (समाधान 2) नहीं किया गया था मेरे .NET ऐप्स के प्रदर्शन को प्रभावित करें।

+0

हाय पडू में समस्या की मांग करने की कोशिश करूंगा, मैंने उल्लेख किया कि यह मुद्दा समान दिखाई देता है, लेकिन स्टार्टअप पर ठीक हो जाता है जो फ़ॉन्ट कैश के साथ समस्या का समाधान करता है। – LukeN

1

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

यदि आप इसे वीएस में दोहरा सकते हैं, तो आपको अनुमानित परेशानी भागों के आसपास कुछ कंसोल लॉगिंग का उपयोग करना चाहिए, अन्यथा आपको इसे टेक्स्टफाइल में खींचना होगा, या इसे सिस्टम लॉगर में भेजना होगा।

आप यह है कि केवल प्रतिपादन और एप्लिकेशन के बाकी के संबंधित भागों करता है, या यह केवल (केवल हो सकता है?) होती है पूरा कार्यक्रम में एक साधारण अनुप्रयोग में reoccur के लिए मिल सकता है?

+1

ढांचा रेंडर थ्रेड का प्रभारी है - जो समस्या है। विवरण के लिए http://blogs.msdn.com/b/nickkramer/archive/2005/07/19/437025.aspx देखें। अनिवार्य रूप से, एप्लिकेशन माइक्रोसॉफ्ट के कोड में लटक रहा है, जबकि मेरा कोड अभी भी चल रहा है जैसा कि इसे करना चाहिए। मुझे यह जानने में दिलचस्पी है कि क्या फ़ॉन्ट कैश सेवा के साथ समस्या वास्तव में लटक रही है, या डब्ल्यूपीएफ पुस्तकालयों के आंतरिक में एक और समान समस्या है जो इस मुद्दे का कारण बन सकती है। यदि उत्तरार्द्ध सत्य है, तो मैं इसका परीक्षण कैसे करूंगा (यह देखते हुए कि मैं wpf या directx के आंतरिक को समझ नहीं पा रहा हूं)। – LukeN

+0

क्या आप यह देखने के लिए प्रतिबिंबित नहीं कर सकते कि यह क्या कर रहा है? निश्चित रूप से आप परावर्तक या ILSpy के बारे में जानते हैं, हाँ? – jcolebrand