【问题标题】:Speeding up rendering of Windows Form elements加快 Windows 窗体元素的呈现
【发布时间】:2019-05-25 17:52:41
【问题描述】:

我正在创建包含大量数据的应用程序,并且应该将一些数据添加到 FlowLayourPanel。 我将它们全部添加到使用 for 中,并在每个 FOR 循环结束时添加。我已经测试了极端值,比如有 1000 个数组成员,它们都应该在屏幕上呈现。 我是多线程的,它的工作速度超快(对它们进行排序,计算最大值、最小值和总和),但是当它需要显示时,它需要 2 秒,甚至可能需要 3 秒,而且我不能多线程,因为 Windows 窗体不允许我这样做。

我的用户数组中不会有 1000 个成员,但我必须尝试一下,而且它必须与这么多成员一起使用。

有什么方法可以实现吗?

它滞后于这一刻,没有这部分代码它立即工作(4毫秒)

PFlow.Controls.Add(Dat[i]);

PFlow 是 flowlayoutpanel 而 Dat[i] 是 data 数据实际上是一个包含 5 个变量、一个数组和几个函数的类。

当我通过 FlowLayoutPanel 快速滚动然后停止时,它会将整个程序冻结 2 秒,就像它再次渲染它一样

【问题讨论】:

  • 启用双缓冲可能有助于解决渲染问题。
  • 做了,还是一样,只是滚动时不闪烁
  • @rfmodulator 你至少知道多线程的方法吗?
  • 您不能在与拥有 FLP 的线程不同的线程上进行绘制或交互。如果您在循环中做很多额外的事情,您可能可以将其卸载到并行进程......我需要查看更多代码来帮助解决滚动问题。
  • @rfmodulator 我做到了,用户 Parallel.For 然后我返回主线程并将其添加到父线程,这就是它的缓慢之处

标签: c# arrays windows winforms optimization


【解决方案1】:

好的,所以我解决了这个问题,现在它是即时的。

是这样的:

List<Control> lis = new List<Control>();
Parallel.For(/* Populate lis */);
PFlow.Controls.AddRange(lis.ToArray());

【讨论】:

    猜你喜欢
    • 2010-09-09
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 2010-12-09
    • 2019-06-29
    • 1970-01-01
    相关资源
    最近更新 更多