4

重い UI ライブラリを使用するシン クライアント アプリケーションの起動時間を短縮するために、RuntimeHelpers.PrepareMethod() の使用を検討しています。

バックグラウンド スレッドで実行する JIT ヘルパー クラスを作成し、型またはアセンブリのメソッドを反復処理して、PrepareMethod を呼び出します。

まず、これを行うことの欠点はありますか?(アプリケーション全体を JIT するという意味ではなく、Infragistics、DevExpress、WPF のウィンドウ クラスを表すクラスなどの重いライブラリを意味します)

第二に、メソッドがすでに JIT されているかどうかを判断する方法はありますか? (ただし、誤って複数回呼び出しても遅延や問題はありませんでした)

最後に、バックグラウンド スレッドで JIT を実行し、現在 JIT が実行されているメソッドを別のスレッドが呼び出すとどうなりますか?

4

1 に答える 1

2

あなたが尋ねることは実装に大きく依存するため、決定的な答えはありません...メソッドがJITされている間、メソッドに何らかのロックがあると予想されます...しかし、特定の.NETバージョンなどを深く掘り下げる以外は. これは憶測のままです...

ところで: JITコンパイラーがジッティング後に設定するIsJittedそれぞれに呼び出される(非パブリック)フィールドがあります...詳細については、こちらを参照してください...MethodDesctrue

于 2012-12-08T13:04:04.580 に答える