VB.NET WinForms 优化使启动速度大大变慢



我们将在窗体上的 Load 事件处理程序内构造 29 个用户控件(每个控件包含许多其他标准控件和用户控件(。

禁用优化后(在调试模式下或在发布模式下的高级编译器设置中(,这大约需要 7 秒。启用优化后,这大约需要 50 秒。这只发生在我们一台非互联网连接的实验室机器上;启动时间或发布和调试在我的机器上大致相同。我们的目标是Visual Studio 2015中的.NET Framework 4.5 x64。

使用远程调试器并定期暂停,这似乎是由 JIT 在代码实例化每个用户控件之前使用大量 CPU 时间引起的。任何想法可能导致这种情况?

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]  

对不起,我对你的实际问题有点困惑。您是否试图弄清楚为什么使用优化器需要更长的时间?

如果是这样,我的答案是优化器占用了CPU(如您所说(,因为它必须优化进出应用程序的每一条信息和数据,即使代码量似乎很少,您也必须记住,如果您调用或加载某些内容, 无论是函数还是从其他地方调用另一个对象,它都必须使其尽可能好地工作。而不是在运行时将所有这些作为对象/函数/所需的任何东西来执行,它只是在您使用任何东西之前优化了所有这些。

最新更新