1

我正在为应用程序创建一个界面。背景都是 1x1 像素。在设计时界面超级慢(visual studio 2012)。移动组件超级滞后。如果我运行应用程序,加载界面大约需要 10 秒。

界面的某些部分可以隐藏。它们再次变得可见,它们需要时间来逐步建立/加载。

如何改进这一点并使界面更流畅/加载更快?

在此处输入图像描述

源代码:

namespace WindowsFormsApplication1
{
    public partial class MapTool : Form
    {
        public int Pin_Berekenen = 0;
        public int pin_Settings = 0;

        public MapTool()
        {
            InitializeComponent();
            BlackSetupUI();
            panel_Berekenen.Visible = false;
            panel_settings.Visible = false;

        }

        void BlackSetupUI()
        {
            SetStyle(ControlStyles.SupportsTransparentBackColor, true);
            SetStyle(ControlStyles.Selectable, false);
            pictureBox_RouteBerekenen.BackColor = Color.Transparent;
            panel_Berekenen.BackColor = Color.Transparent;
            pictureBox_settings.BackColor = Color.Transparent;
            button_pin_berekenen.FlatAppearance.BorderSize = 0;
            button_Berekenen.FlatAppearance.BorderSize = 0;
            label_berekening1.Parent = pictureBox_bar;
            label_berekening1.BackColor = Color.Transparent;
            label_Berekening2.Parent = pictureBox_bar;
            label_Berekening2.BackColor = Color.Transparent;
            label_verschil.Parent = pictureBox_bar;
            label_verschil.BackColor = Color.Transparent;
            button_pin_settings.FlatAppearance.BorderSize = 0;
            label_RouterBerekenen.Parent = pictureBox_bar;
            label_Settings.Parent = pictureBox_bar;
            pictureBox_settings.Parent = pictureBox_bar;
            pictureBox_RouteBerekenen.Parent = pictureBox_bar;
            pictureBox_innectis.Parent = pictureBox_bar;
            label_innectis.Parent = pictureBox_bar;
        }

        void WhiteSetupUI()
        {


        }



        private void MapTool_MouseClick(object sender, MouseEventArgs e)
        {
            if (Pin_Berekenen == 0)
            {
                panel_Berekenen.Visible = false;
            }
            else
            {
                return;
            }

            if (pin_Settings == 0)
            {
                panel_settings.Visible = false;
            }
            else
            {
                return;
            }
        }

        private void button_pin_berekenen_Click(object sender, EventArgs e)
        {
            switch (Pin_Berekenen)
            {
                case 0:
                    Pin_Berekenen = 1;
                    button_pin_berekenen.Image = Properties.Resources.Pinned;
                    break;

                case 1:
                    Pin_Berekenen = 0;
                    button_pin_berekenen.Image = Properties.Resources.Pin;
                    break;

                default:
                    break;
            }
        }

        private void button_pin_settings_Click(object sender, EventArgs e)
        {
            switch (pin_Settings)
            {
                case 0:
                    pin_Settings = 1;
                    button_pin_settings.Image = Properties.Resources.Pinned;
                    break;

                case 1:
                    pin_Settings = 0;
                    button_pin_settings.Image = Properties.Resources.Pin;
                    break;

                default:
                    break;
            }
        }

        private void pictureBox_settings_MouseHover_1(object sender, EventArgs e)
        {
            panel_settings.Visible = true;
        }

        private void pictureBox_RouteBerekenen_MouseHover_1(object sender, EventArgs e)
        {
            panel_Berekenen.Visible = true;
        }

    }
}

我只是在设计界面,如您所见,此应用程序中没有加载任何数据。

4

1 回答 1

0

很难说你的界面到底在“做什么”。但这里有一些一般提示:

  • 您可以在显示初始屏幕(有或没有进度)时预加载某些内容,然后执行所有耗时的工作(例如,构建所有表单、解析所有配置、缓存图形等)。或者甚至将主应用程序放入 dll 中,并使用唯一的闪屏使 exe 文件变小。

  • 您可以优化父/子控件的重绘和布局操作(BeginUpdate/EndUpdate等),因此您不会浪费时间调用不必要的绘制操作,直到它发生的正确时间。您可以使用双缓冲,WS_EX_COMPOSITED。

  • 如果您需要进行大量计算,那么可能需要对某些内容进行虚拟化(您显示“快速占位符”并在计算后将它们替换为真实数据)或缓存

  • 您可以使用许多技巧中的一种来模拟更快(用户可以感觉到)的操作:在屏幕上显示一小部分数据,同时在内存中准备更大部分的数据(某种虚拟窗口),添加一些智能结论和缓存(如果用户向左移动,那么也许他想继续这样,从左侧预加载更多数据,或者如果用户向右移动 100 像素,也许他会想要返回,所以不要卸载该数据)。

  • 也许你有很多数据,你必须对其进行分析和优化,甚至使用 C++ 在单独的 dll 中编写速度要求的部分。

  • 或者,也许您应该重新设计您的 UI,将常用部分拆分为控件,将嵌套的内容放入用户控件中,等等。

于 2013-06-12T09:33:44.110 回答