gpt4 book ai didi

c# - 数以百计的自定义用户控件创建了数以千计的用户对象

转载 作者:太空狗 更新时间:2023-10-29 23:27:07 24 4
gpt4 key购买 nike

我正在创建一个仪表板应用程序,它在 FlowLayoutPanel 上显示数百个“项目”。

每个“项目”都是一个 UserControl,由 12 个文本框或标签组成。

我的应用程序查询数据库,然后为每条记录创建一个“项目”实例,在将数据添加到 FlowLayoutPanel 之前用数据填充标签和文本框。

在向面板添加大约 560 个项目后,我注意到我的任务管理器中的 USER Objects 计数增加到大约 7300,这比我机器上的任何其他应用程序都大得多。

我计算出 560 * 13(12 个标签加上 UserControl 本身)是 7280。所以突然泄露了所有对象的来源...

知道在 Windows 认输之前有 10,000 个 USER 对象的限制,我正在尝试找出将这些“项目”绘制到 FlowLayoutPanel 上的更好方法。

目前我的想法如下:

  1. 用户绘制“项目”,使用 graphics.DrawTextDrawImage 代替许多标签。我希望这意味着 1 个项目 = 1 个 USER Object,而不是 13 个。

  2. 有 1 个“项目”实例,然后为每条记录填充实例并使用 Control.DrawToBitmap() 方法抓取图像,然后在 FlowLayoutPanel(或类似的)

那么...还有其他建议吗???

附言这是一个可缩放的界面,所以我已经排除了“分页”的可能性,因为需要一次查看所有项目

最佳答案

至少,我会从您的第一个想法开始。这确实会将您的应用程序吞噬的窗口数量减少 13 倍。

关于您的想法 #2,如果您随后将 Bitmap 放入 PictureBox(或其他)并因此在您的窗体上有大量的 PictureBox 控件(这甚至可能是 更糟,因为位图有时由比一般 RAM 更有限的资源组成,这与消耗太多窗口是完全不同的问题)。只有当您获取生成的位图并将它们复制到一个更大的控件(然后处理位图)时,这才是一个好主意。

如果您采用后一种方法,那么实际上就没有必要利用渲染到控件、获取控件的位图副本然后将该位图绘制到最终控件上的中间步骤。将用于呈现控件的代码/逻辑直接呈现给最终(多元素)控件会更有意义。

关于c# - 数以百计的自定义用户控件创建了数以千计的用户对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3015813/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com