Ускорить копирование

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ускорить копирование

Сообщение McLion » 25.06.2016 16:47:28

Всем привет,

обращаюсь за помощью ускорить мой алгоритм копирования Item из ShellListView в простую ListView. Работает у меня все отлично, только вот медленно как то. Не подскажите как это ускорить?
Вот код:

Код: Выделить всё
// Копировать Items из ShellListView в ListView
procedure TMainForm.MoveAllToListViewBitBtnClick(Sender: TObject);
var
  MyItem: TListItem;
  i, j, c: Word;
  available: Boolean = False;
begin
  if ShellListView1.Items.Count > 0 then
  begin
    c := ListView1.Items.Count;

    for i := 0 to ShellListView1.Items.Count - 1 do
    begin
      // Тут я проверяю нет ли Itema уже в ListView
      if c > 0 then
      begin
        available := False;
        for j := 0 to c - 1 do
        begin
          if (ShellListView1.Items.Item[i].Caption = ListView1.Items.Item[j].SubItems.Strings[0]) then
            available := True;
        end;
      end;
      // Конец проверки

      // Если в ListView Itema еще нет, тогда добавляем
      if not available then
      begin
        MyItem := ListView1.Items.Add;
        //MyItem.Data := 'Data';
        MyItem.SubItems.Add(ShellListView1.Items.Item[i].Caption);
        MyItem.SubItems.Add(ShellListView1.Items.Item[i].SubItems.Strings[0]);
        MyItem.SubItems.Add(ShellListView1.GetPathFromItem(ShellListView1.Items.Item[i]));
        ListView1.Items[ListView1.Items.Count - 1].Checked := True; // CheckBox setzen

        // И привязываем соответственно иконки
        ListViewTypIcons(ShellListView1.Items.Item[i].SubItems.Strings[1]);
      end;
    end;
  end;
end;


Большое спасибо за помощь!
Аватара пользователя
McLion
постоялец
 
Сообщения: 332
Зарегистрирован: 06.02.2015 18:41:00

Re: Ускорить копирование

Сообщение Mirage » 25.06.2016 17:34:16

А что тормозит и насколько? Количество итемов и сколько времени копируется?
Проверку есть ли уже итем я бы вынес в отдельную функцию и не стал бы гонять цикл до конца, если уже найдено.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Ускорить копирование

Сообщение McLion » 25.06.2016 17:48:50

Mirage писал(а):А что тормозит и насколько? Количество итемов и сколько времени копируется?
Проверку есть ли уже итем я бы вынес в отдельную функцию и не стал бы гонять цикл до конца, если уже найдено.


Да, количество итемов... ShellListView быстрее загружается чем моя ListView.

Да... выйти из цикла раньше, это идея, спасибо!

Еще проблема, если ListView наполнено, 200 итемов например, программа тормозит немного... хотя программа много RAM не жрет и его хватает.
Аватара пользователя
McLion
постоялец
 
Сообщения: 332
Зарегистрирован: 06.02.2015 18:41:00

Re: Ускорить копирование

Сообщение MysticCoder » 25.06.2016 19:26:09

поставь BeginUpdate перед и EndUpdate после заполнения. у Items вроде должен быть.
MysticCoder
постоялец
 
Сообщения: 154
Зарегистрирован: 14.09.2013 00:20:28

Re: Ускорить копирование

Сообщение McLion » 25.06.2016 22:46:07

Класс... спасибо!
Аватара пользователя
McLion
постоялец
 
Сообщения: 332
Зарегистрирован: 06.02.2015 18:41:00


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24

Рейтинг@Mail.ru