Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.09.2013, 12:44
kasper_chib kasper_chib вне форума
Прохожий
 
Регистрация: 26.09.2013
Сообщения: 5
Версия Delphi: Delphi 7
Репутация: 10
Сообщение Привет всем! Оптимизировать!

Привет всем! Кто может подскажите! Проблема следующая:
Есть два файла 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;
Админ: Пользуемся тегами для оформления кода!

подскажите как можно оптимизировать процесс?

Последний раз редактировалось Admin, 27.09.2013 в 13:03.
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:19.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter