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

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

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

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

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

Сообщение McLion »

Всем привет,

обращаюсь за помощью ускорить мой алгоритм копирования 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;


Большое спасибо за помощь!
Mirage
энтузиаст
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia
Контактная информация:

Сообщение Mirage »

А что тормозит и насколько? Количество итемов и сколько времени копируется?
Проверку есть ли уже итем я бы вынес в отдельную функцию и не стал бы гонять цикл до конца, если уже найдено.
Аватара пользователя
McLion
постоялец
Сообщения: 332
Зарегистрирован: 06.02.2015 17:41:00

Сообщение McLion »

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


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

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

Еще проблема, если ListView наполнено, 200 итемов например, программа тормозит немного... хотя программа много RAM не жрет и его хватает.
MysticCoder
постоялец
Сообщения: 154
Зарегистрирован: 14.09.2013 00:20:28

Сообщение MysticCoder »

поставь BeginUpdate перед и EndUpdate после заполнения. у Items вроде должен быть.
Аватара пользователя
McLion
постоялец
Сообщения: 332
Зарегистрирован: 06.02.2015 17:41:00

Сообщение McLion »

Класс... спасибо!
Ответить