Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何为WinForms构建高效的KPI列表_C#_.net_Winforms - Fatal编程技术网

C# 如何为WinForms构建高效的KPI列表

C# 如何为WinForms构建高效的KPI列表,c#,.net,winforms,C#,.net,Winforms,我需要构建一个显示KPI指标的Windows控件。类似于下图所示的内容 还有以下要求: 列表需要每隔15秒从后台线程刷新一次 它需要处理100多个指标 我最初的想法是将FlowLayoutPanel与标签和picturebox(每行)结合使用。我设法创建了完全相同的东西,但随着列表的增长和刷新,UI变得无响应,内存占用也在增加 我在GridView和一些第三方组件上尝试了同样的方法,但每次结果类似时,UI最终都会完全冻结,因为它无法处理这么多的项目 那么,您将如何处理这个问题,您将如何创建这个

我需要构建一个显示KPI指标的Windows控件。类似于下图所示的内容

还有以下要求:

  • 列表需要每隔15秒从后台线程刷新一次
  • 它需要处理100多个指标
  • 我最初的想法是将FlowLayoutPanel与标签和picturebox(每行)结合使用。我设法创建了完全相同的东西,但随着列表的增长和刷新,UI变得无响应,内存占用也在增加

    我在GridView和一些第三方组件上尝试了同样的方法,但每次结果类似时,UI最终都会完全冻结,因为它无法处理这么多的项目


    那么,您将如何处理这个问题,您将如何创建这个控件,您将选择哪些对象来构建UI,以及如何刷新它。(如果有一个看起来不错的第三方控件,它可能也适合我)。

    这样的布局不应该导致内存占用增加或速度减慢

    您的描述听起来更像是控件中的资源泄漏(而不是处理图形对象)。确保您知道,
    IDisposable
    界面意味着需要对笔刷、图形和图像对象使用
    using(){}

    简短的示例:

    using (Graphics g = Graphics.FromImage(picture))
    using (Brush fill = new SolidBrush(Color.Yellow))
    {
        g.FillRectangle(fill, x0, y0, x1, y1);
    }
    

    这样的布局不应导致内存占用增加或速度减慢

    您的描述听起来更像是控件中的资源泄漏(而不是处理图形对象)。确保您知道,
    IDisposable
    界面意味着需要对笔刷、图形和图像对象使用
    using(){}

    简短的示例:

    using (Graphics g = Graphics.FromImage(picture))
    using (Brush fill = new SolidBrush(Color.Yellow))
    {
        g.FillRectangle(fill, x0, y0, x1, y1);
    }
    

    好的,我改变了我的方法,并没有向面板和其他东西添加控件,而是按照您的建议直接绘制它们。工作发现:)+25为你。好的,我改变了我的方法,并没有向面板和其他东西添加控件,而是按照您的建议直接绘制它们。工作发现:)+25为你。Tnx。