All articles

Az inline optimalizálás szivatásai

Published 2006-07-28 - Last modified 2006-07-31

Original: https://soci.hu/blog/index.php/2006/07/28/az-inline-optimalizalas-szivatasai/

Érdekes esetbe ütköztem.

private static string SettingName()
{
  StackTrace st = new StackTrace();
  StackFrame sf = st.GetFrame(2);
  return sf.GetMethod().Name.Substring(4);
}

private static object GetItemFromStore()
{
   return GetItemFromStore((PersistentSettingsKeys)Enum.Parse(
   typeof(PersistentSettingsKeys),
   SettingName()));
}

No, ami ebben érdekes, hogy a debug verzió simán lefut, a release viszont elszáll, mert a stack frame 1-el rövidebb! A Jitter inlineosítja a SettingName-et, így a reflection is eggyel elcsúszik. Ez nekem azért meglepő, mert az IL kódban még nincs inline-osítás (ok, az nem is egy managed compiler dolga), de ami meglepő, hogy a jitter inline látszik a reflectionön keresztül. A megoldás persze elég egyszerű,

[MethodImpl(MethodImplOptions.NoInlining)]

kell a SettingName elé.

 

(Ha valaki tudna segíteni hogyan lehet kódot szépen elhelyezni wordpressben kérdem segítsen.)