2015-08-28 7 views
5

में मैंने हाल ही में अपनी मशीन पर .NET Framework को .NET 4.6 में अपग्रेड किया है और ऑब्जेक्ट्स के बाइनरी (डी) क्रमिकरण के समय में एक बड़ा अंतर देखा है।बाइनरी सीरियलाइजेशन धीमी (कभी-कभी) .NET 4.6

उदाहरण के लिए, मेरे पास 10 एमबी फ़ाइल है जो मेरी मशीन पर ~ 2 सेकंड में .NET 4.5.2 के साथ deserialized था। .NET 4.6 में अपग्रेड करने के बाद इसमें 50 सेकंड तक लगते हैं (!) - वास्तविक समय बहुत यादृच्छिक है: कभी-कभी इसमें 2 सेकंड लगते हैं, कभी-कभी 50 सेकंड (एक ही फ़ाइल, एक ही प्रोग्राम, एक ही प्रक्रिया)।

क्या किसी और ने इसी तरह के व्यवहार को देखा है और शायद इस मुद्दे के लिए एक समाधान (या समाधान) मिला है?

+7

क्या आप कोड के साथ अपना बयान साबित कर सकते हैं? प्रश्न "कभी-कभी कुछ काम नहीं करता" शायद बंद हो जाएगा। पूछने से पहले आपने शोध में क्या प्रयास किया? – netaholic

+0

खैर, मेरा कार्यक्रम बहुत जटिल है (मैं सैकड़ों क्षेत्रों के साथ वस्तुओं को क्रमबद्ध करता हूं) लेकिन मैं समस्या का एक छोटा सा उदाहरण खोजने की कोशिश करूंगा। मैंने .NET 4.6 से संबंधित परिवर्तनों (या समस्याओं) के बारे में कोई जानकारी खोजने का प्रयास किया है, लेकिन अब तक मुझे कोई नहीं मिला है (हालांकि .NET 4.6 के RyuJIT में मौजूद कुछ गंभीर समस्याओं के प्रमाण हैं, इसलिए शायद क्रमिकरण समस्याएं किसी भी तरह से संबंधित है) – Bartek

+0

क्या आप (डी) कक्षाओं या structs serialising हैं? –

उत्तर

4

यह मानने का एक छोटा सा कारण बाइनरी क्रमबद्धता के साथ कुछ भी करने के लिए है, यह बहुत निश्चित है। यादृच्छिक व्यवहार और संभावना है कि आप कचरा कलेक्टर को 10 मेगाबाइट फ़ाइल के साथ काफी भारी पोक करेंगे, एक बहुत अच्छा उम्मीदवार this bug है। काफी डोज़ी।

यदि आपके पास एक अच्छा रेपो है तो किसी भी धीमी जनरल # 1 संग्रह को देखने के लिए नए डायग्नोस्टिक्स टूल्स का उपयोग करें। और GCSettings.LatencyMode के साथ टिंकर, यदि इसका कोई प्रभाव पड़ता है तो आप जानते हैं कि यह अंतर्निहित कारण है। जल्द ही तय किया जाना चाहिए।

+0

इस संकेत के लिए धन्यवाद । मैंने एक धागा जोड़ा है जो जीसी में बिताए गए समय के प्रतिशत पर नज़र रखता है। यह इन महत्वपूर्ण स्थानों (deserialization के दौरान/बाद में) में निकला 99% समय जीसी (डिफ़ॉल्ट सेटिंग्स के साथ) में खर्च किया जाता है। जब मैं GCLatencyMode.LowLatency में बदल गया तो यह अब अवरुद्ध नहीं था और जीसी समय का% 50% या उससे भी अधिक था। – Bartek

+1

मानसिक डीबगिंग के लिए एक स्कोर करें। –

+0

इस तरह के जवाब पढ़ने के लिए प्यार है। यह वास्तविक समस्या के समाधान के साथ एक लक्षण और उत्तर के रूप में सवाल की पहचान करता है। – jgauffin

0

वस्तुओं को deserializing जब हम BinaryFormatter के साथ बिल्कुल एक ही समस्या का सामना करना पड़ा। जैसा कि हमने देखा है कि यह फ्रेमवर्क 4.6 में एक बग के कारण है जो फ्रेमवर्क 4.6.1 में हल किया गया है। परिवर्तनों की सूची here पाई जाती है। अपमानजनक बग समांतर बाइनरी फ़ाइल deserialization [141896] के बेहतर प्रदर्शन है।

+0

हमारे ऐप 4.6.1 के लिए धीमा प्रदर्शन को हल नहीं किया गया था .नेट 4.5.2 –

+0

@ ओल्डफार्ट जैसा कि हमने 4.5.2 - सामान्य, 4.6 अत्यंत धीमी, 4.6.1 सामान्य का उपयोग किया था। – participant

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