C#.NET form.Show()非常慢

时间:2009-12-03 05:15:35

标签: c# .net

我在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)

3 个答案:

答案 0 :(得分:3)

如果您已对表单进行了分析和优化,则可能必须使用等待光标,闪屏或进度条。

如果您没有分析,我强烈建议您这样做。可能有一些方法耗费了大量时间。

如果您的表单中有很多控件(800个说?),您可以考虑修改表单的初始化以使用后台工作程序 - 基本上您将控件加载到一个单独的线程中。根据您的具体要求,这可能是也可能是不可能的。

修改

我在答案中假设您的800控件是必要的 - 您很可能只需在需要时重新组织代码以加载控件。如果你不能立即重组你的代码,那么找到最糟糕的罪魁祸首是一个很好的第二选择。

答案 1 :(得分:2)

配置初始化组件方法。你有非原生控制吗?第三方?其中一些人的渲染速度非常慢。您是否为任何控件设置数据源?在设计时使用项目填充控件?在页面加载后尝试移动它们。

是的,800个控件是一个页面。那只是一个设计糟糕的页面。先解决这个问题。

答案 2 :(得分:0)

我认为分析表单可能不是您需要的,而是分析用户控件。

甚至更好。如果表单中有选项卡,也许您可​​以将控件的加载移动到第一次选项卡为焦点时。只加载启动时用户可见的cotrols,然后根据请求加载其余的cotrols。