Показать сообщение отдельно
  #1  
Старый 11.11.2013, 12:01
To_wave To_wave вне форума
Прохожий
 
Регистрация: 11.11.2013
Сообщения: 5
Версия Delphi: delphi 2006
Репутация: 10
По умолчанию Оптимизация обработки длинных циклов

Все доброго времени суток, не могли бы вы помочь оптимизировать работу следующей процедуры:

Код:
procedure TForm1.Button3Click(Sender: TObject);
var L1,L2,L3:TStringList;
D1:TOpenDialog;
n1:string;
i:integer;
begin
L1:=TStringList.Create; //создание 1го стринглиста
L2:=TStringList.Create; //создание 2го стринглиста
L3:=TStringList.Create; //создание 3го стринглиста

D1:=TOpenDialog.Create(self);

if D1.Execute then n1:=D1.Filename else exit;
L1.LoadFromFile(n1);

if D1.Execute then L2.LoadFromFile(D1.Filename) else exit;

for i:=0 to L1.Count-1 do
if L2.IndexOf(L1[i])=-1 then L3.Add(L1[i]);

L3.SaveToFile('3.txt');
D1.Free;L1.Free; L2.Free; L3.Free;

end;

В общих чертах:
есть файл 1 с набором строк
есть файл 2 с набором строк-2

Задача из файла 1 удалить все строки, которые встречаются в файле 2 и результат записать в файл 3.
НО проблема заключается вот в чем. В файле 1 около 2 млн. строк, в файле 20 тыс.
В данном алгоритме обрабатывается 1000 строк из 2х млн. в 7-8 секунд, что даже не вооруженным взглядом видно, что очень долго.

Есть ли какие нибудь идеи, как оптимизировать обработку файлов.
Спасибо.
Ответить с цитированием