c# winform我找出但不理解动态生成控件慢的原因

u010454623 2016-04-15 10:43:45
for (int k = 0; k <= (count % 6); k++)
{
.. //生成控件的代码,未设置颜色
}
fontsize();
color();//就是因为这个改颜色,我在这个类似这个方法的里面干过别的事,也不会这么慢啊,这颜色高贵点吗?


private void color()
{

foreach (Control c in this.Controls)
{
for (int j = 5; j <= appcount +4; j++)
{
if (c is Button)
{
Button btn = c as Button;
string btnname = btn.Name;
try
{
if (int.Parse(btnname.Substring(6)) == j)
{
btn.BackColor = Color.Green;
}
}
catch (Exception)
{


}


}
}
}
}
...全文
346 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
好几只小萝莉 2016-04-16
  • 打赏
  • 举报
回复
appcount 是什么。 控件有多少个。
ttsffgg 2016-04-16
  • 打赏
  • 举报
回复
用性能分析无法看出是哪里耗时吗?
u010454623 2016-04-16
  • 打赏
  • 举报
回复
引用 2 楼 szOOrz 的回复:
appcount 是什么。 控件有多少个。
appcount是用来区别的,比如绿色的数量,控件就几十个。 我之前设置好颜色 不用这个color()就很快了 不明白为什么之后设置颜色可以慢好六七秒
u010454623 2016-04-16
  • 打赏
  • 举报
回复
引用 1 楼 overown 的回复:
用性能分析无法看出是哪里耗时吗?
不太懂您的意思 我之前先设置好颜色在生成控件就很快了 就是不明白为什么之后设置颜色可以慢好六七秒
u010454623 2016-04-16
  • 打赏
  • 举报
回复
引用 9 楼 xuzuning 的回复:
for (int k = 0; k <= (count % 6); k++) 你这不是六个吗? count % 6 只能是 0~5,k 递增到 6 循环就结束了 你 foreach (Control c in this.Controls) 就已经遍历控件了 那还要 for (int j = 5; j <= appcount +4; j++) 做什么? 你只需判定 int.Parse(btnname.Substring(6)) 在 5 到 appcount +4 之间就设置就可以了,不比用循环 即便要循环,那也应该把 if (c is Button) 放在 for 循环外面,只有 button 才需要有设置操作 如果 appcount 很大,仅作条件判断,开销也是不小的,完全不需要对一个控件做 appcount 次检查 还有,循环中一旦对控件做了设置,就应该跳出循环。满足条件的只有一个
(前面有部分代码忘记贴上去了)谢谢你的回答!十分感谢
xuzuning 2016-04-16
  • 打赏
  • 举报
回复
for (int k = 0; k <= (count % 6); k++) 你这不是六个吗? count % 6 只能是 0~5,k 递增到 6 循环就结束了 你 foreach (Control c in this.Controls) 就已经遍历控件了 那还要 for (int j = 5; j <= appcount +4; j++) 做什么? 你只需判定 int.Parse(btnname.Substring(6)) 在 5 到 appcount +4 之间就设置就可以了,不比用循环 即便要循环,那也应该把 if (c is Button) 放在 for 循环外面,只有 button 才需要有设置操作 如果 appcount 很大,仅作条件判断,开销也是不小的,完全不需要对一个控件做 appcount 次检查 还有,循环中一旦对控件做了设置,就应该跳出循环。满足条件的只有一个
u010454623 2016-04-16
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
拢共只有 6 个控件,能慢到哪里去? 不过你的 for (int j = 5; j <= appcount +4; j++) 循环,可是做了不少无用功!
而且不是六个控件啊 生成的控件数七八十个button吧 但是上颜色的时候花了很多时间不知道为什么 颜色之前设置好再生成控件就非常快了
u010454623 2016-04-16
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
拢共只有 6 个控件,能慢到哪里去? 不过你的 for (int j = 5; j <= appcount +4; j++) 循环,可是做了不少无用功!
慢了8s! 所以理解不了啊 无用功该怎么优化呢
xuzuning 2016-04-16
  • 打赏
  • 举报
回复
拢共只有 6 个控件,能慢到哪里去? 不过你的 for (int j = 5; j <= appcount +4; j++) 循环,可是做了不少无用功!
PaulyJiang 2016-04-16
  • 打赏
  • 举报
回复
是不是try的原因 去掉试试

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧