【问题标题】:How to increase speed while getting Images and text from database?如何在从数据库中获取图像和文本时提高速度?
【发布时间】:2012-03-28 11:30:23
【问题描述】:

我正在尝试使用以下代码,但我的应用程序性能不佳。

我在“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 吗?那我用的是哪个控件?

请帮帮我

【问题讨论】:

  • 图像在数据库中以 BLOB 数据的形式存储,重量很大。是否可以预取此信息并将其保存在您的记忆中。如果您的图像相当小(以 KB 为单位,而不是以 MB 为单位),2000 并不是一个大块
  • 我的所有图像都以 KB 为单位,但需要 2 分钟才能加载此表单。 @questzen
  • 数据库获取非常耗时。您可以通过在本地内存中缓存图像来缩短周转时间。如果您的应用程序允许,请尝试事先初始化这 2000 个对象。
  • 我的 foreach 循环需要 2 分钟才能执行。可以删除 foreach 循环吗? @questzen
  • 请看我的回答

标签: .net winforms linq c#-4.0


【解决方案1】:

我想,通常你只需要下载你展示的图片和周围的几个。 所以如果你下载5个afters和5个current before,你的速度就可以了。

【讨论】:

    【解决方案2】:

    我可以看到您正在使用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 禁用绘画来获得更好的性能。

    【讨论】:

      【解决方案3】:

      我们不能总是提高性能,但我们绝对可以提高感知性能。假设您正在开发一个 UI 应用程序,请参考以下逻辑。

      作为应用程序启动的一部分,尝试获取所有图像和相关数据。这很耗时,但不要担心。将这些对象缓存在内存中(HashMap?)。当您发现需要为用户创建流程面板时,请尝试在缓存中查找并快速渲染图像。

      您正在执行的 sql 强制执行数据库往返。尝试在没有 where 条件(批量获取)的情况下执行“select *”来填充缓存。

      【讨论】:

        【解决方案4】:

        也许您应该只在即将使用按钮时才创建它。 (或其中一些,如ykatchou 的回答。)

        即使你确实想一次性创建它们——你最好使用BackgroundWorker创建它们。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-08-06
          • 1970-01-01
          • 2018-12-30
          • 2018-04-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-16
          相关资源
          最近更新 更多