2010-03-03 5 views
5

से कॉलिंग अप्रबंधित। डीएल का प्रदर्शन निम्नलिखित वाक्यविन्यास का उपयोग कर सी # अनुप्रयोग से सी ++ में लिखे गए .dll को कॉल करके सामान्य ओवरहेड कितना समय जोड़ा जाता है?सी #

[DllImport("abc.dll", EntryPoint = "xcFoo", CallingConvention = CallingConvention.Cdecl)] 
public extern static Result Foo(out IntPtr session, 
       [MarshalAs(UnmanagedType.FunctionPtr)]ObjectCallback callback, 
       UInt64 turnKey, 
       string serverAddress, 
       string userId, 
       string password); 

क्या ऐसा करने का एक और अधिक प्रभावी तरीका है?

उत्तर

7

इंटरऑप प्रदर्शन को बेहतर बनाने के तरीके पर इस आलेख को देखें। क्या करना है और इससे बचने के लिए सबसे अच्छा क्या है।

http://msdn.microsoft.com/en-us/library/ms998551.aspx

1

क्या आप मूल विधि का आह्वान करने के उपरांत के बारे में बात कर रहे हैं? यदि ऐसा है, तो मुझे नहीं लगता कि यह बिल्कुल महत्वपूर्ण है, क्योंकि .NET फ्रेमवर्क क्लास पुस्तकालयों में ऐसी कई कॉल हैं।

अब, क्या आपके परिदृश्य के लिए ओवरहेड महत्वपूर्ण है, केवल प्रदर्शन माप करके जवाब दिया जा सकता है, और आप जो अपेक्षा करते हैं उसके मुकाबले तुलना कर सकते हैं।

0

देशी विधि में मार्शलिंग एनटी ढेर से तीन स्मृति आवंटन की लागत होगी, जो इतना बुरा नहीं है। यह प्रतिनिधि प्रतिनिधि है जो चिंताजनक हो जाता है।

0

एक बढ़िया तरीका यह जांच करने के लिए बात की इस तरह एक को तोड़ने बिंदु है जहां आप कॉल करने में फेंक है। यह नहीं पता कि लाइब्रेरी कब लोड की जाती है, इसलिए शायद दूसरे कॉल पर ब्रेक पॉइंट की जांच करें (जब तक लोडिंग लागत आपकी मुख्य चिंता न हो)। फिर दृश्य स्टूडियो में डिस्सेप्लर विंडो खोलें और देखें कि आपके डीएलएल फ़ंक्शन को लागू करने से पहले कितनी लाइनें हैं।