Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Увеличение скорости поиска в TStringList [D7, WinXP]


Morg ©   (2004-07-22 13:35:00) 

Вот такие вот методы поиска и сохранения инфы в TStringList ОЧЕНЬ медленно работают. Не могли бы мастера подсказать более рациональный способ расхода процессорного времени?


function TDispatchThread.GetDNSCacheRecord(domain: string): string;
begin
  EnterCriticalSection(Fcs);
  try
    with MainForm.FDnsCache do begin
       Result := Values[domain];
    end;
  finally
     LeaveCriticalSection(Fcs);
  end;
end;

procedure TDispatchThread.SaveDNSCacheRecord(domain, mailserv: string);
begin
  EnterCriticalSection(Fcs);
  try
    with MainForm.FDnsCache do begin
       if IndexOf(domain+'='+mailserv) = -1 then
          Add(domain+'='+mailserv);
    end;
  finally
     LeaveCriticalSection(Fcs);
  end;
end;


Morg   (2004-07-22 14:36:00) [1]

2 Думкин ©  

> 2. Если очень хочется, то можно хешировать

расскажи плз что это есть такое и как сие осуществить плз :)


Morg   (2004-07-22 14:06:00) [2]

2 Думкин

Блин.. ТОЧНО!!! Сенкс тебе!


Думкин   (2004-07-22 14:03:00) [3]

> [6] Morg   (22.07.04 14:01)

1. Тебе сказали
2. Duplicates property (TStringList)


Morg   (2004-07-22 14:01:00) [4]

2 Думкин

Ну подскажи плиз как ты считаешь лучше это дело замутить...


Думкин   (2004-07-22 13:55:00) [5]


> [2] Morg   (22.07.04 13:43)
> Ok. Щас попробую, но думаю сильного выйгрыша в скорости
> не будет.


1. Будет. В первом случае поиск O(n) а во втором O(log2(n)).
2. Если очень хочется, то можно хешировать.

Только операция Add - будет работать медленнее. И вообще можно делать не так если боитесь дубликатов.


default   (2004-07-22 13:54:00) [6]

Рамиль ©   (22.07.04 13:51) [3]
"function TStringList.IndexOf(const S: string): Integer;
begin
 if not Sorted then Result := inherited IndexOf(S) else
   if not Find(S, Result) then Result := -1;
end;"


Рамиль   (2004-07-22 13:51:00) [7]

Будет, только используй Find, а не IndexOf


Morg   (2004-07-22 13:43:00) [8]

Ok. Щас попробую, но думаю сильного выйгрыша в скорости не будет. А если первую часть - в строку, а вторую - в объект? Типа AddObject(). В качестве объекта - указатель на строку. Так бысрее будет?


default   (2004-07-22 13:37:00) [9]

сделай список строк сортируемым тогда поиск будет происходить делением пополам


Наверх

Титульная страница Поиск, карта сайта Написать письмо