मैं उसी मशीन में ऐपडोमेन्स में संचार करने के प्रदर्शन दंड को कम करने की कोशिश कर रहा हूं। मेरे खिलौने के उदाहरण में, कक्षा ए को AppDomain 1 में लोड किया गया है। यह एक AppDomain 2 बनाता है और वहां क्लास 2 (मार्शलबीरफ से क्लास 2 विरासत) का एक उदाहरण वापस प्रॉक्सी प्राप्त करता है। फिर कक्षा 1 बार-बार प्रॉक्सी पर एक विधि कॉल करता है जो कोई मान नहीं देता है।न्यूनतम क्रॉस ऐपडोमेन संचार प्रदर्शन जुर्माना क्या है?
मैं निम्नलिखित परिणाम प्राप्त:
- नहीं AppDomains, दोनों वर्गों में एक ही AppDomain में लोड किए गए हैं और पहली कॉल (विधि कोई पैरामीटर है) दूसरे पर विधि repetedly: 24 मिलियन विधि 340.000 तरीकों कॉल/सेकंड
- दो AppDomains जैसा कि ऊपर वर्णित एक serializable पैरामीटर (दो स्ट्रिंग की सरणी: कॉल/सेकंड
- दो AppDomain जैसा कि ऊपर वर्णित विधि कोई पैरामीटर या "खून बह रहा है" स्ट्रिंग पैरामीटर है ओं): 64.000 विधि कॉल/सेकंड
हालांकि मैं 2 और 3 (क्रमबद्धता) के बीच प्रदर्शन की सजा को समझते हैं, मैं वास्तव में समझ में नहीं आता कि मैं क्यों मामला 2 के मामले 1 से 100 गुना धीमी कर रहा हूँ । मेरी समझ के लिए, प्रॉक्सी बनने के बाद सभी बाद के विधि आमंत्रण वास्तव में तेज़ होना चाहिए क्योंकि एक ऐपडोमेन से दूसरे तक कोई डेटा मार्शल नहीं किया जा रहा है। क्या कोई अब ऐपडोमेन्स में संचार क्यों कर रहा है? क्या मुझसे कुछ गलत हो रही है?
PS1। मेरे पास एकमात्र टिप है जो here है: "और ऐपडोमेन सीमा पार करने की लागत शर्मनाक है।" मैं अनुमान लगा रहा था कि वह धारावाहिकता को संदर्भित करता है ...
PS2। मैं ऐपडोमेन या प्रॉक्सी निर्माण समय (मेरे बेंचमार्क पहली विधि आमंत्रण में शुरू नहीं होता)
PS3 की गणना नहीं करता है। मैं WinXP SP3 मशीन में .NET 3.5 का उपयोग कर रहा हूं। मैंने कोई महत्वपूर्ण मतभेद के साथ .NET 4.0 बीटा 1 भी कोशिश की।
+1 मैं पूरी तरह से आपसे सहमत हूं। एक साधारण सीधी विधि कॉल बेहद सरल है। ** रीमोटिंग ** के माध्यम से एक विधि कॉल बहुत भारी है। ओवरहेड बहुत बड़ा है। एकमात्र असली समाधान एक अच्छा एप्लीकेशन डिज़ाइन है जो क्रॉस ऐपडोमेन संचार की गति पर निर्भर नहीं करेगा। – jpbochi