快速优化Windows窗体应用程序

时间:2009-02-15 23:02:19

标签: c# .net winforms optimization

如何加速优化Windows窗体应用程序?

我不是在谈论明显的.NET优化技术 - 比如NGEN - ing,缓存对象等。我已经尝试过了,我要做的是将表单启动时间从1500毫秒减少到500毫秒。

分析确定了最慢的代码,几乎所有代码都在InitializeComponent中,在此方法中,最慢的代码是

  1. 创建(刚刚更新的)WebBrowser组件
  2. 从资源加载图标(隐藏的500毫秒)
  3. 创建ContextStripMenu
  4. 多个this.Controls.Add()来电也做出了很多贡献。
  5. 目前,我只能看到如何修复点(2) - 将图标数据从嵌入资源存储到私有字段(例如,Base64 - 编码字符串)。

    第1,3和4点应该怎么做?

6 个答案:

答案 0 :(得分:1)

我能想到的唯一可以做的就是重写你想要使用的控件并优化它们以更快地初始化(以及Form类以优化添加控件添加到形式)。

我看不出这是多么可行,而且我认为你会受到这种困扰,这取决于你对这些控制的依赖。

答案 1 :(得分:1)

将图标加载到单独的InitializeComponentAsync主题中。

答案 2 :(得分:0)

您可以为Webbrowser控件进行延迟加载吗?如果它位于不是主视图的选项卡中,则可以在激活该选项卡时加载webbrowser。

或者您可以加载表单然后加载webbrowser(这可能会帮助您先显示一些内容然后显示所有内容,就像您在网站中所做的那样)。

答案 3 :(得分:0)

  1. 在拍摄时,请选择ClsAppearance.cs之类的其他课程。

  2. 初始化所有控件,例如

    static Infragistics.Win.Appearance txtBoxMidAppr = null;
    

    如果是txtBoxMidAppr,我会使用自己的名字appiarance1。由于它可以用于所有文本框,只需初始化一次。

  3. 创建一个函数,我们可以初始化外观并在MDI / Main表单上加载一次。

    public static void LoadAll()
    {
        txtBoxMidAppr = new Infragistics.Win.Appearance();
    }
    
  4. 在此处创建另一个函数并从设计窗口中获取外观代码

    public static Infragistics.Win.Appearance App_txtBoxMidAppr //text_box_small
    {
        get 
        {
            txtBoxMidAppr.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(93)))), ((int)(((byte)(93)))), ((int)(((byte)(93)))));
            txtBoxMidAppr.ImageBackground = global::CS_POS.Properties.Resources.text_box_small;
            txtBoxMidAppr.ImageBackgroundStyle = Infragistics.Win.ImageBackgroundStyle.Stretched;
            txtBoxMidAppr.ImageHAlign = Infragistics.Win.HAlign.Right;
            return txtBoxMidAppr;
        }
    }
    
  5. 在表单的设计代码中,注释文本框的所有外观设置,并从ClsAppearance.cs

    中输入用于获取外观的函数名称
    //appearance4.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(93)))), ((int)(((byte)(93)))), ((int)(((byte)(93)))));
    //appearance4.ImageBackground = global::CS_POS.Properties.Resources.text_box_small;
    //appearance4.ImageBackgroundStyle = Infragistics.Win.ImageBackgroundStyle.Stretched;
    //appearance4.ImageHAlign = Infragistics.Win.HAlign.Right;
    this.uteNABoth.Appearance = CS_POS.App_Appearance.ClsAppearance.App_txtBoxMidAppr;
    

    获取所有控件外观并在类中创建一个函数并从那里调用它。

  6. 因此外观初始化只会进行一次并且可以使用很多次。

答案 4 :(得分:0)

我已经改变了表单加载的策略,这将对表单加载时序做出很大改变,现在它平均需要37毫秒而不是466毫秒。

方法:On首次点击Top-tab / Icon,应用程序在该选项卡/图标下加载所有表单,然后单击Form Icon,它只会切换可见性。再次访问Top-tab不会加载该选项卡下的表单。

答案 5 :(得分:0)

我过去使用的一种技术是多线程数据加载,以便它同时运行到表单创建。在这种情况下,数据从AD加载,它减少了大约1/3的加载时间。