2017-06-14 78 views
1

我们正在构建29个用户控件(每个包含许多其他标准和用户控件),它们位于Form上的Load事件处理函数内部。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

没有看到负载处理程序中的代码,很难推测。一种可能性,因为这是64位,是负载处理程序中发生的臭名昭着的例外情况。代码是否包含在Try-Catch块中以检测异常?作为一种解决方法,您的代码使用''属性装饰该方法。 – TnTinMn

回答

0

对不起,我为您的实际问题有点困惑。你想知道为什么当你使用优化器需要更长的时间吗?

如果是这样,我的答案是优化器正在占用CPU(如您所说),因为它必须优化每个信息和数据被推入和移出应用程序,甚至看似少量的代码,你必须记住,如果你调用或加载一些东西,不管是一个函数还是从其他地方调用另一个对象,它都必须尽可能地完成这项工作。而不是在运行时将所有这些作为对象/函数/任何需要的来完成,而是在甚至可以使用任何东西之前简单地优化它。