CodeProjectに興味がそそられる記事があったのでメモメモ。
以下のクラスのメソッドを利用することでpre-JITが行えるみたいです。
System.Runtime.CompilerServices.RuntimeHelpers.PrepareMethod
こんな名前空間気にした事もなかったw
実際に使う場合は、CodeProjectの記事にもあるように、専用のスレッドを
低プライオリティで立ててその中で実行するのが普通ですね。
using System.Runtime.CompilerServices; // Pre-JITを行うスレッド作成. Thread jitter = new Thread(() => { var flags = (BindingFlags.DeclaredOnly | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static); foreach (var type in heavyAsm.GetTypes()) { foreach (var method in type.GetMethods(flags)) { RuntimeHelpers.PrepareMethod(method.MethodHandle); } } }); // メソッドの優先度を最低に設定して実行. jitter.Priority = ThreadPriority.Lowest; jitter.Start();