C# WinForms UI在用户控件中时的加载速度要慢得多
我的应用程序的主界面相当大。具有outlook类型的计划控件。以及大约40个.NET基本控件 如果所有这些都放进表单本身,它加载速度很快,一切看起来都很棒 我最近将所有这些控件移动到一个用户控件中,然后通过反射,从磁盘加载程序集,然后将其强制转换到(控件),并以我的形式调用以下内容:C# WinForms UI在用户控件中时的加载速度要慢得多,c#,.net,winforms,user-controls,loading,C#,.net,Winforms,User Controls,Loading,我的应用程序的主界面相当大。具有outlook类型的计划控件。以及大约40个.NET基本控件 如果所有这些都放进表单本身,它加载速度很快,一切看起来都很棒 我最近将所有这些控件移动到一个用户控件中,然后通过反射,从磁盘加载程序集,然后将其强制转换到(控件),并以我的形式调用以下内容: this.Controls.Add(myUserCtrl); 由于将所有内容都移动到用户控件中,我从2-3秒的加载时间变为15-20秒的加载时间。即使我仍然加载相同数量的控件 有人能解释为什么将控件移动到User
this.Controls.Add(myUserCtrl);
由于将所有内容都移动到用户控件中,我从2-3秒的加载时间变为15-20秒的加载时间。即使我仍然加载相同数量的控件
有人能解释为什么将控件移动到UserControl中会产生如此糟糕的负载性能吗
我已经尝试了一切,包括调用挂起/恢复布局函数。将代码从
表单加载
移动到构造函数
在Form_Load中,控件的句柄已经创建,因此所有更新都需要进行本机调用来更新实际的窗口句柄。这可能很慢,这取决于你在做什么。(调用
BeginUpdate
/EndUpdate
会有所帮助)
通过将代码移动到构造函数,可以在创建句柄之前初始化所有内容
取决于代码的功能,这不一定会有任何好处。当您在调试器中暂停它时,它挂起在哪里?@Slaks-您对我删除的帖子的评论被证明是正确的。我创建了一个应用程序来测试这个理论,证据支持你的评论。非常感谢。请不要在标题中添加“C#.NET WinForms”。把它们留在标签上。谢谢你的沙拉。。。难以置信,这解决了我所有的问题:-)还要注意的是,正在将内容从On_Paint()移动到构造函数。同样有效。我的userControl的加载时间从大约3-4秒下降到大约0.5秒。投票结果是肯定的。:)