试图让我的窗户更轻盈

时间:2012-07-28 10:50:34

标签: c# winforms

我有一个包含很多控件的表单,可以执行大量的交互操作。这导致我的表单在使用过程中有一些延迟。 其中一个控件是绘图工具,用于绘制从我的服务器收到的大量数据。我想把绘图工具移动到另一种形式,试图让我的形状更轻,减少延迟问题。我被一位朋友告知,这不会有太大帮助,因为处理这两种形式的线程是一样的,这是真的吗?

3 个答案:

答案 0 :(得分:2)

你朋友说的是真的,但不太适用于此。当表单具有大量控件时,会出现缓慢。当需要重绘时,您将开始注意每个控件绘制自己所花费的时间。通常,当表单有大约50个控件时会发生这种情况,但很大程度上取决于控件的类型。按钮非常昂贵,例如标签不是。你的情节可能很昂贵,所以在之后绘制的任何东西(在Z顺序中更高)都会被延迟。尝试右键单击控件并单击“置于前面”,以便最后绘制。

无论你做什么,从不只是做出一些重大改变,就像你正在考虑的那样,知道你将改进你的计划。这首先需要测量。您需要一个分析器来了解cpu周期的消耗位置。分析绘制代码并不容易,因为它不经常执行。这可以修复,修改你的表单构造函数,使它看起来像这样:

    public Form1() {
        InitializeComponent();
        Application.Idle += new EventHandler((s, ea) => this.Invalidate());
    }

你的表格现在燃烧100%的核心,一遍又一遍地重新粉刷。但其他方面仍然完全正常运作。正是您需要有效地描绘绘画代码。

答案 1 :(得分:0)

如果您在应用程序启动时创建表单(绘图工具容器),那么您的启动速度将会下降...

然后你有两种方式:

  

1)将绘图工具容器移动到新表单,但在需要时创建它(在应用程序启动后)

     

2)将绘图工具移动到新线程。在这种情况下,您可以以另一种形式移动它并通过新线程创建它。所以,如果你使用这个   你的起步速度会上升

答案 2 :(得分:0)

从给出的答案开始here

我刚刚尝试了代码并对其稍作修改以使其更清晰:

static void Main()
{
    Thread t1 = new Thread(Main1);
    Thread t2 = new Thread(Main2);

    t1.Start();
    t2.Start();

    t1.Join();
    t2.Join();
}

static void Main1()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
}

static void Main2()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form2());
}

我可以说它有效,因为我尝试在其中一个中使用Thread.Sleep()而第二个形式gui没有锁定。