我在C#.NET Framework 2.0中遇到了form.Show()的问题。
//segment code (FormA's caller)
FormA frmA = new FormA();
writeLog("Begin: " + Environment.TickCount);
frmA.SuspendLayout();
frmA.Show();
frmA.ResumeLayout();
writeLog("End: " + Environment.TickCount);
....
//segment code (FormA)
private void FormA_Load(object sender, EventArgs e){
writeLog("Begin - Load: " + Environment.TickCount);
}
从上面的段代码中,我构建了发布模式并执行它。 我在笔记本电脑(Windows XP x86)上发现“开始:”和“开始 - 加载”之间的时间差异大约2-3秒,而服务器(Windows 2003 SP2)上的不同时间超过5秒。 我不知道为什么。
此外,FormA有许多TableLayout和UserControl(总控制大约800)
答案 0 :(得分:3)
如果您已对表单进行了分析和优化,则可能必须使用等待光标,闪屏或进度条。
如果您没有分析,我强烈建议您这样做。可能有一些方法耗费了大量时间。
如果您的表单中有很多控件(800个说?),您可以考虑修改表单的初始化以使用后台工作程序 - 基本上您将控件加载到一个单独的线程中。根据您的具体要求,这可能是也可能是不可能的。
修改强>
我在答案中假设您的800控件是必要的 - 您很可能只需在需要时重新组织代码以加载控件。如果你不能立即重组你的代码,那么找到最糟糕的罪魁祸首是一个很好的第二选择。
答案 1 :(得分:2)
配置初始化组件方法。你有非原生控制吗?第三方?其中一些人的渲染速度非常慢。您是否为任何控件设置数据源?在设计时使用项目填充控件?在页面加载后尝试移动它们。
是的,800个控件是一个页面。那只是一个设计糟糕的页面。先解决这个问题。
答案 2 :(得分:0)
我认为分析表单可能不是您需要的,而是分析用户控件。
甚至更好。如果表单中有选项卡,也许您可以将控件的加载移动到第一次选项卡为焦点时。只加载启动时用户可见的cotrols,然后根据请求加载其余的cotrols。