Привет всем! Кто может подскажите! Проблема следующая:
Есть два файла dbf каждый примерно около 100 000 записей.
Записи перегоняю в StringList, для каждого dbf свой StringList.
Дальше сравниваю StringList-ы и по неким условиям пишу результат в другие StringList-ы. Работает очень медленно, примерно 2 500 записей обрабатываются 10 минут. Тормозит на этом цикле:
Код:
// функция из dbf пишет в StringList
StrListSprEgkNew := WriteDbfInStringList(dirFileSprNew);
dirFileSprOld := FindDirForFileSpr(False);
StrListSprEgkOld := TStringList.Create;
// функция из dbf пишет в StringList
StrListSprEgkOld := WriteDbfInStringList(dirFileSprOld);
StrListSprEgkRez := TStringList.Create;
StrListSprEgkRezInvalid := TStringList.Create;
for iStrListSprEgkNew := 0 to StrListSprEgkNew.Count - 1 do
begin
markRez := 1; // метка писать в результирующий1 StringList
markRezInvalid := 0;// метка писать в результирующий2 StringList
codeEgkNew := strWord(StrListSprEgkNew[iStrListSprEgkNew],2,#9);
// функция StrWord(s,n,a) из строки s вырезает позицию n разделителя a
invalidNew := StrToInt(strWord(StrListSprEgkNew[iStrListSprEgkNew],4,#9));
for iStrListSprEgkOld := 0 to StrListSprEgkOld.Count - 1 do
begin
invalidOld := StrToInt(strWord(StrListSprEgkOld[iStrListSprEgkOld],4,#9));
codeEgkOld := strWord(StrListSprEgkOld[iStrListSprEgkOld],2,#9);
if codeEgkNew = codeEgkOld then
begin
markRez := 0;
if (invalidOld = 1) and (invalidNew = 0) then
begin
markRez := 1;
end;
if (invalidOld = 0) and (invalidNew = 1) then
begin
markRezInvalid := 1;
end;
end;
end;
if (markRez = 1) and (invalidNew = 0) then
begin
StrListSprEgkRez.Add(StrListSprEgkNew[iStrListSprEgkNew]);
end;
if markRezInvalid = 1 then
begin
StrListSprEgkRezInvalid.Add(StrListSprEgkNew[iStrListSprEgkNew]);
end;
Logger.Add(IntToStr(iStrListSprEgkNew));
end;
Админ: Пользуемся тегами для оформления кода!
подскажите как можно оптимизировать процесс?