Как увеличить скорость при получении изображений и текста из базы данных? - PullRequest
1 голос
/ 28 марта 2012

Я пытаюсь использовать следующий код, но у меня не получается хорошая производительность в моем приложении.

У меня есть список из 2000 изображений в «dt_Images.ToList ()».

В сс:

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);
            }

Я также пытался привязать к списку, но не набрал желаемой скорости.

Как я могу увеличить скорость при связывании с flowLayoutPanel?

Могу ли я связать прямой источник данных в элементе управления? тогда какой контроль я использовал?

Пожалуйста, помогите мне

Ответы [ 4 ]

1 голос
/ 28 марта 2012

Я думаю, что обычно вам нужно только загрузить изображение, которое вы показываете, и несколько человек вокруг. Так что, если вы загрузите 5 после и 5 до текущего, ваша скорость будет в порядке.

0 голосов
/ 28 марта 2012

Я вижу, что вы используете панель 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();

Вы даже можете попытаться добиться еще лучших результатов, отключив рисование, используя ответы здесь .

0 голосов
/ 28 марта 2012

Возможно, вам следует создавать кнопку только тогда, когда вы собираетесь ее использовать. (Или несколько из них, как в ответе ykatchou .)

Даже если вы делаете хотите создать их все сразу - вам лучше создать их, используя BackgroundWorker .

0 голосов
/ 28 марта 2012

Мы не всегда можем улучшить производительность, но мы определенно можем улучшить воспринимаемую производительность.Предполагая, что вы разрабатываете приложение пользовательского интерфейса, обратитесь к следующей логике.

При запуске приложения попробуйте получить все изображения и соответствующие данные.Это отнимает много времени, но не волнуйтесь.Кэшируйте эти объекты в памяти (HashMap?).Когда вы обнаружите необходимость в создании панели потока для пользователя, попробуйте поискать в кеше и быстро визуализировать изображение.Попробуйте выполнить 'select *' без условия where (массовая выборка) для заполнения кэша.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...