当前位置: 首页 > 编程语言 > C#

超级慢的C#自定义控件分享

时间:2023-04-10 15:01:08 C#

超级慢的C#自定义控件我做了一个自定义控件,它是一个FlowLayoutPanel,我在里面放了一堆其他的自定义控件(就是按钮,每个都有三个标签和一个PictureBox覆盖)它可以很好地处理大约100个按钮,但它会增加到1000个并且出现问题。最多5000个,20秒后死亡。我的自定义代码很少,我明智地使用暂停和恢复布局。那我做错了什么?我确定我的(相当快的)计算机应该能够处理几千个按钮和标签。(我对C#GUI很陌生,所以也许我应该做一些完全不同的事情。)编辑1:这几乎是迄今为止唯一的自定义代码:flowLayoutPanel1.SuspendLayout();foreach(DataRowrowindt.Rows)//dt来自数据库查询{flowLayoutPanel1.Controls.Add(newPersonButton(row));}flowLayoutPanel1.ResumeLayout();在PersonButton构造函数中:this.label1.Text=row["FirstName"].ToString().Trim()+""+row["Surname"].ToString().Trim();(还应该附上一张图片,但我不确定是否有人会看到它。)编辑2:我想我应该使用DataGridView或ListView,但我想要的不仅仅是一行文本和每行一个小图标;我希望它看起来类似于firefox中的下载视图(Ctrl+J)。(见屏幕截图)非常感谢您的所有输入,顺便说一句。我想我必须重新考虑...alttexthttp://img156.imageshack.us/img156/1057/capture.pngC#WinForm应用程序可以处理任何类型控件的1000个实例吗?我不是WinForm大师,但您对您的应用程序的期望可能不合理。您想要显示1000多个任何类型的控件这一事实可能表明您正在从错误的方向进行软件设计。您必须发布一些布局代码,否则我们将无能为力。此外,您最好的选择是分析您的代码。分析是找出代码中执行缓慢的唯一可靠方法。根据我的经验,对于UI代码尤其如此。在1000多个按钮上,您可能会在GDI资源和/或应用程序的原始句柄上危险地运行。不确定您的应用程序应该做什么,但网格或组合框可能是更好的选择。5k控件对于任何类型的环绕面板都需要太多布局逻辑。您可能希望查看设计有数千个条目的不同类型的控件——类似于DataGridView。DataGridView有几种不同的列类型可用于您显示的数据类型(图像、按钮、标签)。由于您的数据库查询似乎返回一个DataTable,您可以将它直接绑定到DataGridView并删除循环。听起来您真的需要重新考虑您的界面。就像其他人提到的那样,表单上的控件数量将不起作用。然而,我做了一些实验来查看在代码中创建新控件的时间,即使使用反射,我发现在流布局面板中动态创建的数百个数据绑定控件应该在1到2秒内创建。发布更多代码示例可能有助于获得更好的答案。更多信息:我刚刚重新运行我的计时测试,300个控件用了0.5秒,400个用了1.9秒,600个用了3秒,1000个用了6秒。似乎在300到400之间存在资源开始过度利用的限制。[Necromanticmode=ON]你有1000行数据,但只能显示其中的一些,因此只创建可见控件并在滚动时重复使用它们以使用新数据更改其内容。尝试这个;在您的代码中删除此方法。受保护的覆盖CreateParamsCreateParams{get{CreateParamscp=base.CreateParams;cp.ExStyle|=0x02000000;返回cp;}}以上就是C#学习教程分享的全部内容:超级慢的C#自定义控件,如果对大家有用还有需要了解更多C#学习教程的,希望大家多多关注——本文整理自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: