从数据库获取图像和文本时如何提高速度?

时间:2012-03-28 11:30:24

标签: .net winforms linq c#-4.0

我正在尝试使用以下代码,但我在我的应用程序中没有获得良好的性能。

我在“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吗?然后我用了哪个控件?

请帮帮我

4 个答案:

答案 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禁用绘画来尝试获得更好的表现。