我正在尝试使用以下代码,但我在我的应用程序中没有获得良好的性能。
我在“dt_Images.ToList()”中列出了2000张图片。
在cs中:
foreach (var dr in dt_Images.ToList())
{
BTN = new Button();
BTN.Name = dr.Name.ToString();
BTN.Image = dr.Image;
BTN.Text = dr.text.ToString();
flowLayoutPanel1.Controls.Add(BTN);
BTN.Click += new EventHandler(this.pic_Click);
}
我也尝试使用listview绑定,但没有达到理想的速度。
如何在使用flowLayoutPanel绑定时提高速度?
我可以直接绑定DataSource吗?然后我用了哪个控件?
请帮帮我
答案 0 :(得分:1)
我想,通常你只需要下载你展示的图片和周围的图片。 因此,如果你下载5个晚上和5个当前之前,你的速度就可以了。
答案 1 :(得分:0)
我们不能总是提高性能,但我们绝对可以提高感知性能。假设您正在开发UI应用程序,请参阅以下逻辑。
作为应用程序启动的一部分,尝试获取所有图像和相关数据。这很费时间,但不要担心。将这些对象缓存在内存中(HashMap?)。当您发现需要为用户创建流程面板时,请尝试在缓存中查找并快速渲染图像。
您正在执行的sql强制数据库往返。尝试在没有where条件(批量提取)的情况下执行'select *'来填充缓存。
答案 2 :(得分:0)
也许您只应在使用它时创建一个按钮。 (或者ykatchou的答案中的一些。)
即使您做想要一次创建它们 - 您最好使用BackgroundWorker创建它们。
答案 3 :(得分:0)
我可以看到您正在使用FlowLayout
面板。我怀疑每次添加子控件时都要重做整个布局,这可能会花费很多时间。
你能尝试用这种方式包围整个循环:
flowLayoutPanel1.SuspendLayout();
foreach (var dr in dt_Images.ToList())
{
BTN = new Button();
BTN.Name = dr.Name.ToString();
BTN.Image = dr.Image;
BTN.Text = dr.text.ToString();
flowLayoutPanel1.Controls.Add(BTN);
BTN.Click += new EventHandler(this.pic_Click);
}
flowLayoutPanel1.ResumeLayout();
您甚至可以通过使用答案here禁用绘画来尝试获得更好的表现。