2011-09-30 17 views
5

मेरे पास एक win32 dll और दो अनुप्रयोग हैं जो एक ही डीएल का उपयोग करते हैं। एक अप्रबंधित अंतरिक्ष में सी का उपयोग करके लिखा जाता है और दूसरा .NET एप्लिकेशन है जो पिनवोक्स का उपयोग करके अप्रबंधित कोड को कॉल करता है।प्रबंधित कोड से अप्रबंधित कोड का आविष्कार करने का प्रदर्शन

कभी-कभी .NET अनुप्रयोग का प्रदर्शन सी अनुप्रयोग से बेहतर होता है। तकनीकी रूप से .net से अप्रबंधित कोड का आह्वान करते हुए प्रदर्शन ओवरहेड होता है लेकिन इस मामले में नहीं।

मैंने एमएसडीएन संदर्भ की जांच की और ऐसा लगता है कि वास्तविक कॉल किए जाने से पहले ऐसा कुछ प्रीप्रोकैसिंग होता है। लिंकेज के दौरान डीएल लोड हो गया है।

मैं समझना चाहता हूं कि कौन से परिदृश्य हैं। नेट एप्लिकेशन बेहतर प्रदर्शन करता है?

+2

आप दो अनुप्रयोगों के प्रदर्शन को कैसे मापते हैं, और क्या अन्य सभी तर्क बिल्कुल दोनों के लिए समान हैं? –

+1

आम तौर पर, मूल कॉल तेज होना चाहिए, इसे देखें: http://www.codeproject.com/KB/dotnet/pinvokeperformance.aspx क्या आप सुनिश्चित हैं कि आपके माप सही हैं? –

+0

@AvadaKedavra - मैंने क्रमशः .net और c अनुप्रयोग के लिए स्टॉपवॉच और समय का उपयोग कर एक विशेष विधि कॉल मापा। – sundar

उत्तर

5

पिनवोक मार्शलर .NET ढांचे में कोड के सबसे भारी अनुकूलित हिस्सों में से एक है। बहुत महत्वपूर्ण बात यह है कि एक अप्रबंधित ऑपरेटिंग सिस्टम पर एक प्रबंधित प्रोग्राम चलाते समय आप बहुत सारे पिनवोक नहीं देख सकते हैं। ओवरहेड की मात्रा अत्यधिक परिवर्तनीय है। यह कुछ हद तक सीपीयू चक्र है जब डीएलएल पहले ही लोड हो चुका है और पिनवॉक्ड फ़ंक्शन के तर्क सरल अभिन्न प्रकार हैं। जब कहते हैं, कई सैकड़ों चक्रों के लिए, स्ट्रिंग रूपांतरण आवश्यक हैं।

किसी भी परिस्थिति में यह कभी भी मूल कॉल से तेज़ नहीं होता है। ओवरहेड मापना जो केवल चक्रों का एक मुट्ठी भर सटीक है। और ध्यान रखें कि आप अनजाने में पिनवोक कॉल के बजाय अपने परीक्षण कार्यक्रम के perf को माप सकते हैं।

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