मैं बस सोच रहा था कि क्या एक साधारण स्थैतिक फ़ंक्शन का उपयोग कर रहा है? ऑपरेटर को समय संकलन के दौरान रेखांकित किया गया है। कोड का उपयोग करके एक मनमाना उदाहरण यहां दिया गया है।क्या विधियों का उपयोग कर रहे हैं?: जेआईटी संकलन के दौरान ऑपरेटर रेखांकित?
public static int Max(int value, int max)
{
return value > max ? max : value;
}
निम्नलिखित में से कौन आईएल देता है:
Max:
IL_0000: nop
IL_0001: ldarg.0
IL_0002: ldarg.1
IL_0003: bgt.s IL_0008
IL_0005: ldarg.0
IL_0006: br.s IL_0009
IL_0008: ldarg.1
IL_0009: stloc.0
IL_000A: br.s IL_000C
IL_000C: ldloc.0
IL_000D: ret
या सरल विकल्प inlined किया जाएगा?
Max:
IL_0000: nop
IL_0001: ldarg.0
IL_0002: ldarg.1
IL_0003: cgt
IL_0005: stloc.0
IL_0006: ldloc.0
IL_0007: brfalse.s IL_000E
IL_0009: nop
IL_000A: ldarg.1
IL_000B: stloc.1
IL_000C: br.s IL_0013
IL_000E: nop
IL_000F: ldarg.0
IL_0010: stloc.1
IL_0011: br.s IL_0013
IL_0013: ldloc.1
IL_0014: ret
::
public static int Max(int value, int max)
{
if (value > max)
{
return max;
}
else
{
return value;
}
}
यहाँ इसके लिए आईएल है ऑपरेटर जाहिरा तौर पर एक अधिक संक्षिप्त MSIL अगर विकल्प की तुलना में उत्पन्न करता है, लेकिन किसी को भी पता है कि JIT संकलन के दौरान होता है? क्या वे दोनों रेखांकित हैं? क्या उनमें से कोई भी रेखांकित है?
"इनलाइन" क्या घबराना अनुकूलक एक * विधि * के साथ करता है पर लागू होने वाला एक शब्द है। ?: ऑपरेटर एक विधि नहीं है, इसके लिए मशीन कोड हमेशा "लाइन में" उत्पन्न होता है, यहां तक कि गैर-अनुकूलित डीबग बिल्ड में भी। –
आपकी अधिकतम विधि? निश्चित रूप से, यह बहुत छोटा है और कुछ भी ऐसा नहीं करता है जो अनुकूलक पसंद नहीं करता है। आपको अपने प्रश्न का शीर्षक ठीक करने की जरूरत है। –
@ क्रिस्टिक मैं हंस से सहमत हूं, आप शीर्षक थोड़ा भ्रामक है। यह ऐसा लगता है कि आप यह पूछ रहे हैं कि '?:' ऑपरेटर खुद को '?:' युक्त विधियों के बजाय रेखांकित किया गया है, जो आपका वास्तविक प्रश्न है। –