2015-09-08 15 views
7

क्या यह पता लगाने के लिए कैननिकल (यदि कोई है, अन्यथा कोई भरोसेमंद) तरीका क्या है तो क्या JIT इंजन पोर्टेबल तरीके से उपलब्ध है?यह पता लगाने के लिए कि क्या JIT उपलब्ध है

उदाहरण के लिए, Xamarin.iOS आईआईटी प्लेटफार्म DEP लागू करने के बाद से जेआईटी का समर्थन नहीं करता है। मोनो इन दिनों लैम्ब्डा अभिव्यक्तियों जैसी अधिकांश चीजों को समझकर अंतर को ब्रिज करने में काफी अच्छा है, लेकिन कुछ चीजें ठीक से लागू नहीं होती हैं, जिससे रनटाइम अपवाद होते हैं जो प्रदर्शन को बुरी तरह प्रभावित करते हैं।

यदि संभव हो तो मैं साझा पोर्टेबल क्लास लाइब्रेरी से यह पता लगाना चाहता हूं।

+1

हम्म, नहीं, आप आईओएस पर एक जिटर का उपयोग नहीं कर सकते क्योंकि ऐप्पल इसे मना करता है। वे ऐप प्रमाणित नहीं करेंगे। पोर्टेबल लाइब्रेरी से ऐसे प्लेटफ़ॉर्म-विशिष्ट विवरणों को खोजने का प्रयास करना एक गैर-स्टार्टर है, मुख्य ऐप को मदद करने की आवश्यकता है। –

+0

ऐप्पल उन पृष्ठों को लागू करने से मना कर देता है जो लिखने योग्य नहीं होते हैं कभी निष्पादन योग्य नहीं होते हैं (सफारी अपवाद है)। मुझे लगता है कि यह कहने का एक और तरीका है :) – Krumelur

उत्तर

1

कुछ मोनो स्रोत कोड में खोदने के बाद, ऐसा लगता है कि "जादू" बिल्ड-टाइम संपत्ति FULL_AOT_RUNTIME है। उदाहरण के लिए, System.Reflection.Emit.AssemblyBuilder सशर्त इस संपत्ति को सेट किए बिना किया जा रहा है के आधार पर संकलित किया गया है, जिसका अर्थ है

var canJit = Type.GetType ("System.Reflection.Emit.AssemblyBuilder") != null; 

मुझे मिलना चाहिए कि मैं क्या चाहता हूँ।

2

आप एक ऑपरेशन करने का प्रयास कर सकते हैं जो आपको पता है कि आप अपने एओटी कोड पर असफल हो जाएंगे, लेकिन जेआईटी पर नहीं (उदाहरण के लिए गतिशील रूप से एक प्रकार का निर्माण) और जेआईटी उपलब्ध है या नहीं, यह निर्धारित करने के लिए एक कोशिश/पकड़ ब्लॉक का उपयोग करें।

यह (ध्यान दें कि यह केवल असफल हो जायेगी लिंकर को "लिंक सभी विधानसभाओं" पर सेट है) इस तरह लागू किया जा सकता:

private static bool? _isJITAvailable = null; 
public static bool IsJITAvailable() 
{ 
    if(_isJITAvailable == null) 
    { 
     try 
     { 
      //This crashes on iPhone 
      typeof(GenericClass<>).MakeGenericType(typeof(int)); 
      _isJITAvailable = true; 
     } 
     catch(Exception) 
     { 
      _isJITAvailable = false; 
     } 
    } 

    return _isJITAvailable.Value; 
} 

मैं बहुत है, हालांकि ऐसा नहीं होता। क्या आपको वास्तव में उन "बेहतर प्रदर्शन कॉलबैक" की आवश्यकता है? यह वास्तव में एक समयपूर्व अनुकूलन की तरह लगता है।

+0

मुझे नहीं लगता कि 'अपवाद' को पकड़ने का तरीका यह है कि यह सचमुच कुछ भी हो सकता है, 'स्टैक ओवरफ्लो एक्सेप्शन', 'आउटऑफमेमरी एक्सेप्शन' और इसी तरह ..,। – Kamo

+0

आपका पॉइंट सही @ Kamo है। मुझे इस मामले में 'मेकजेनेरिक टाइप' द्वारा फेंक दिया गया विशिष्ट अपवाद याद नहीं है और मेरे पास अभी इसका परीक्षण करने का कोई मतलब नहीं है, लेकिन जैसे ही मैं –

+0

करता हूं, मैं उत्तर अपडेट कर दूंगा, मुझे लगता है कि यह 'समर्थित नहीं है अपवाद ':) – Kamo

0

रनटाइम पर दो कॉलबैक के प्रदर्शन का परीक्षण क्यों नहीं करें?

यदि आपका मंच प्लेटफ़ॉर्म की तुलना में धीमा है, तो प्लेटफॉर्म का उपयोग करें।
यदि मंच आपके से धीमा है, तो अपना उपयोग करें।

+0

मेरे लिए थोड़ा अजीब लगता है। मेरा वर्तमान समाधान मुख्य ऐप को संकेत देना है, जो पूरी तरह से खराब नहीं है। मैं बस जानना चाहता था कि एक साफ समाधान है या नहीं। – Krumelur

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