FormのLoadイベントハンドラの内部に、29個のユーザーコントロール(他にも多くの標準コントロールとユーザーコントロールが含まれています)を構築しています。VB.NET WinFormsの最適化により、起動が大幅に遅くなります
最適化を無効(デバッグモードまたはリリースモードの詳細コンパイラ設定のいずれか)にすると、約7秒かかります。最適化を有効にすると、これには約50秒かかります。これはインターネットに接続されていないラボマシンでのみ発生します。起動時やリリースとデバッグは私のマシンではほぼ同じです。 Visual Studio 2015の.NET Framework 4.5 x64をターゲットにしています。
リモートデバッガを使用して定期的に一時停止すると、コードが各ユーザーコントロールをインスタンス化する前にCPU時間を大量に使用しているJITによって発生しているようです。これを引き起こす可能性のあるアイデアは何ですか?ほとんどの時間を取っているように見えるJIT機能の
スタックトレース:
clrjit.dll!THX_NColBestCoverage(struct tagNCOLLIFETIME *,struct tagNCOLREGION *,class hashBv *,unsigned int,unsigned int,int *,struct CI_TAG *)
clrjit.dll!THX_NColDeterminePhysregAvail(struct tagNCOLLIFETIME *,struct tagNCOLREGION *,class hashBv *,unsigned int,unsigned int,struct tagSYM *,int *,int *,struct CI_TAG *)
clrjit.dll!THX_NColProcessCandidateRegion(struct tagNCOLLIFETIME *,struct tagNCOLREGION *,struct tagNCOLREGION *,struct tagNCOLUSEBENEFITS *,struct tagTUPLE *,int,struct tagNCOLPHYSREGAVAILS *,struct CI_TAG *)
clrjit.dll!THX_NColor(struct tagFUNC *,struct CI_TAG *)
clrjit.dll!THX_dop2_CodegenUpdate(struct tagFUNC *,struct CI_TAG *)
clrjit.dll!THX_dop2(class JitContext *,struct CI_TAG *,unsigned char * *,unsigned int *)
clrjit.dll!PreJit::compileMethod(class ICorJitInfo *,struct CORINFO_METHOD_INFO *,unsigned int,unsigned char * *,unsigned long *)
[Managed to Native Transition]
ロードハンドラのコードを見ることなく、推測するのは難しいです。 1つの可能性は、これが64ビットなので、ロードハンドラで起こる悪名高い例外的な食い込みです。 Try-Catchブロックにコードをラップして例外を検出していますか?回避策として、 ' '属性でメソッドを飾ります。 –
TnTinMn