2017-06-14 4 views
1

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] 
+0

ロードハンドラのコードを見ることなく、推測するのは難しいです。 1つの可能性は、これが64ビットなので、ロードハンドラで起こる悪名高い例外的な食い込みです。 Try-Catchブロックにコードをラップして例外を検出していますか?回避策として、 ' '属性でメソッドを飾ります。 – TnTinMn

答えて

0

すみません、私はあなたの実際の質問に、わずか混乱しています。なぜあなたはオプティマイザを使用するときにずっと時間がかかるのか理解しようとしていますか?

もしそうなら、私の答えは、オプティマイザがアプリケーションの内外にプッシュされている各情報とデータを最適化しなければならないということです。あなたが何かを呼び出したり読み込んだりすると、それが関数であろうと別のオブジェクトを別の場所から呼び出すにしても、可能な限りその作業を行わなければならないということを心に留めなければなりません。実行時にオブジェクト/関数/必要なものとしてすべてを行うのではなく、単に何かを使用する前にすべてを最適化するだけです。

関連する問題