प्रतिनिधियों में Invoke और DynamicInvoke के बीच क्या अंतर है? कृपया मुझे कुछ कोड उदाहरण दें जो उन दो तरीकों के बीच अंतर बताता है।Invoke और DynamicInvoke
उत्तर
जब आपके पास प्रतिनिधि प्रतिनिधि होता है, तो आपको सटीक प्रकार पता हो सकता है, या आप शायद यह जान सकें कि यह Delegate
है। यदि आप सही प्रकार जानते हैं, तो आप Invoke
का उपयोग कर सकते हैं, जो बहुत तेज़ है - सबकुछ पहले से ही पूर्व-मान्य है। उदाहरण के लिए:
Func<int,int> twice = x => x * 2;
int i = 3;
int j = twice.Invoke(i);
// or just:
int j = twice(i);
हालांकि! यदि आपको पता है कि यह Delegate
है, तो इसे मैन्युअल रूप से पैरामीटर आदि को हल करना होगा - इसमें अनबॉक्सिंग आदि शामिल हो सकते हैं - बहुत सारे प्रतिबिंब चल रहे हैं। उदाहरण के लिए:
Delegate slowTwice = twice; // this is still the same delegate instance
object[] args = { i };
object result = slowTwice.DynamicInvoke(args);
नोट मैं args
लंबे हाथ है कि एक object[]
शामिल है यह स्पष्ट करने के लिए लिखा है। वहाँ अतिरिक्त लागत के बहुत सारे यहां हैं:
- सरणी
- पारित कर दिया तर्क मान्य एक वास्तविक
MethodInfo
- unboxing आदि के रूप में आवश्यक
- प्रतिबिंब-आह्वान तो
- के लिए "फिट" कर रहे हैं कॉलर को वापसी मूल्य
मूल रूप से DynamicInvoke
से बचने के लिए कुछ करने की आवश्यकता है ओह आप कर सकते हैं। Invoke
हमेशा बेहतर होता है, जब तक आपके पास Delegate
और object[]
नहीं है।
एक प्रदर्शन तुलना के लिए, (एक सांत्वना exe) डिबगर के बाहर रिलीज़ मोड में निम्न प्रिंट:
Invoke: 19ms
DynamicInvoke: 3813ms
कोड:
Func<int,int> twice = x => x * 2;
const int LOOP = 5000000; // 5M
var watch = Stopwatch.StartNew();
for (int i = 0; i < LOOP; i++)
{
twice.Invoke(3);
}
watch.Stop();
Console.WriteLine("Invoke: {0}ms", watch.ElapsedMilliseconds);
watch = Stopwatch.StartNew();
for (int i = 0; i < LOOP; i++)
{
twice.DynamicInvoke(3);
}
watch.Stop();
Console.WriteLine("DynamicInvoke: {0}ms", watch.ElapsedMilliseconds);
- 1. Invoke और BeginInvoke
- 2. पी/Invoke
- 3. पी/Invoke
- 4. PowerShell स्टार्ट-प्रोसेस और invoke-command
- 5. अंडरस्कोर जेएस _.each विधि और _.invoke विधि
- 6. पावरहेल v3 Invoke-RestMethod
- 7. पावरहेल के Invoke-Command
- 8. पी/Invoke, सी #: एक बाइट
- 9. लिंक से SQL DynamicInvoke (System.Object []) 'के पास SQL
- 10. सी ++ और सी # इंटरऑपरेबिलिटी: पी/Invoke बनाम सी ++/सीएलआई
- 11. स्टार्ट-जॉब बनाम Invoke-command -asjob
- 12. पावरहेल Invoke-Command निकालें-आइटम रिमोट सर्वर
- 13. .NET में Invoke() का उपयोग क्या है?
- 14. सी # पी/Invoke: फ़ंक्शन पॉइंटर्स युक्त मार्शलिंग संरचनाएं
- 15. तर्कों के साथ फ़ंक्शन पर Invoke-Command -ScriptBlock का उपयोग
- 16. पॉइंटर्स शामिल होने पर P/Invoke कैसे करें
- 17. वापसी मूल्य कैसे प्राप्त करें जब BeginInvoke/Invoke को C#
- 18. पावरहेल Invoke- स्व-हस्ताक्षरित प्रमाणपत्र और मूल प्रमाणीकरण का उपयोग कर RestMethod - कोई उदाहरण?
- 19. क्या .NET में FFMpeg, libavutil, libavformat और libavcodec के लिए काम करने वाले पी/Invoke घोषणाओं का एक सेट है?
- 20. .NET में पी/Invoke पर COM इंटरऑप क्यों पसंद किया जाता है?
- 21. पी/Invoke का उपयोग करते समय Win32 प्रकार से C# प्रकारों को कैसे मानचित्र करें?
- 22. पावरहेल का Invoke-Command -ComputerName पैरामीटर के लिए एक चर में नहीं ले जाएगा?
- 23. स्ट्रोक करने के लिए Invoke-Expression के पाइप आउटपुट कैसे करें?
- 24. मैं Invoke विधि का उपयोग किये बिना दो लैम्ब्डा अभिव्यक्तियों को कैसे जोड़ सकता हूं?
- 25. char के साथ एक सी डीएलएल फ़ंक्शन को कॉल करना * पी/Invoke
- 26. "invoke-command" के साथ कमांड का रिटर्न कोड पकड़ना - पावरहेल 2
- 27. पावरशेल: Invoke-Command का उपयोग करके आदेश निष्पादित करने में त्रुटि?
- 28. पी/Invoke का उपयोग करते समय StringBuilder.Capacity सेट करने का सही तरीका क्या है?
- 29. LINQ अभिव्यक्ति नोड प्रकार 'Invoke' इकाई ढांचे में LINQ से इकाइयों में समर्थित नहीं है
- 30. पी/Invoke [इन, आउट] विशेषताएँ मार्शलिंग सरणी के लिए वैकल्पिक हैं?
यह मतलब यह है कि उपयोग के DynamicInvoke मामले में संकलक प्रतिनिधि आमंत्रण को संभालने के लिए अधिक आईएल कोड उत्पन्न करते हैं? – testCoder
@testCoder नहीं, यह प्रतिबिंब –
का उपयोग करेगा, बहुत पूर्ण स्पष्टीकरण। – testCoder