![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Увеличение скорости поиска в 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]сделай список строк сортируемым тогда поиск будет происходить делением пополам