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

C#.NET form.Show()速度非常慢,c#,.net,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: " + Envi

我对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);
    }
根据上面的段代码,我在发布模式下构建并执行它。 我发现在我的笔记本(WindowsXPx86)上“开始:”和“开始加载”之间的时间相差约2-3秒,而在服务器(Windows2003SP2)上的时间相差超过5秒。 我不知道为什么


此外,FormA有许多TableLayout和UserControl(总控件数约为800)

如果您已经分析并优化了表单,则可能需要使用等待光标、启动屏幕或进度条

如果您还没有简要介绍,我强烈建议您这样做。可能有一些方法会占用很多时间

如果你的表单中有很多控件(800,你说),你可以考虑修改表单的初始化来使用BeaBoeWorks--本质上,你将控件加载到一个单独的线程中。考虑到您的具体要求,这可能是可能的,也可能是不可能的

编辑:


在我的回答中,我假设您的800个控件是必需的——很可能您可以重新组织代码,以便仅在需要时加载控件。如果您不能立即重新组织代码,那么分析以找到最坏的罪魁祸首是一个不错的第二选择。

如果您已经分析并优化了表单,则可能需要使用等待光标、启动屏幕或进度条

如果您还没有简要介绍,我强烈建议您这样做。可能有一些方法会占用很多时间

如果你的表单中有很多控件(800,你说),你可以考虑修改表单的初始化来使用BeaBoeWorks--本质上,你将控件加载到一个单独的线程中。考虑到您的具体要求,这可能是可能的,也可能是不可能的

编辑:


在我的回答中,我假设您的800个控件是必需的——很可能您可以重新组织代码,以便仅在需要时加载控件。如果您不能立即重新组织代码,那么分析以找到最坏的罪魁祸首是一个不错的第二选择。

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


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

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


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

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


是的,800个控件是一个页面。那只是一个设计糟糕的页面。首先修复该问题。

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


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

“我不知道为什么。”这是因为800是一个需要初始化的大量控件!在本例中,我调用InitializeComponent form Constructor,但是为什么.show()来form_load非常耗时“我不知道为什么”。这是因为800是一个需要初始化的大量控件!在本例中,我调用InitializeComponent form Constructor,但是为什么.show()用于form_加载会耗费时间,我有我的控件和一些用于show TIFF image+1的控件是的,800是巨大的。不过我希望OP在评测后会意识到这一点。是的,我有我的控件和一些用于显示TIFF图像+1的控件是的,800是巨大的。不过我希望OP在分析后会意识到这一点。