Вниз
Скачать: CL | DM;

Оптимизировать по скорости   Найти похожие ветки 

← →
Modus   (2003-09-07 09:46) [0]

У меня в программе очень часто используется следующая функция:

Function FindItem(S: String; Str: TStrings; FindAtFirst: Boolean = False): Integer;
Var t: Integer;
Begin
Result:=-1;
For t:=Integer(not FindAtFirst) to Str.Count-1 Do
IF Pos(S,Str[t])>0 then
Begin
Result:=t;
Break;
End; {IF}
End;


Нельзя ли её оптимизировать по скорости (ассемблер, указатели и пр.). В таком случае скорость исполнения возрастёт многократно в повторяющихся операциях. Прошу помочь.


← →
cyborg ©   (2003-09-07 10:04) [1]

Для начала можно объявить так:
Function FindItem(Const S: String;Const Str: TStrings; FindAtFirst: Boolean = False): Integer;

Если строки переменные конечно, а не задаются в вызове функции.

и Result:=-1; перенести в конец функции, в этом случае Break нужно заменить на Exit.


← →
Романов Р.В. ©   (2003-09-07 12:01) [2]

1. Вместо функции pos использовать фунцию из библиотеки QStrings
2. Использовать кэширование при поиске
3. Использовать хэширование


← →
Song ©   (2003-09-07 13:36) [3]

2Романов Р.В. © (07.09.03 12:01) [2]
>> Вместо функции pos использовать фунцию из библиотеки QStrings
Зачем советовать человеку то чего нет? Я в CLX такого не видел.


← →
Романов Р.В. ©   (2003-09-07 21:19) [4]

http://www.torry.net/text.htm
Там написано под D5, но думаю что и под D6 откомпилится


← →
Anatoly Podgoretsky ©   (2003-09-07 21:48) [5]

Все потери времени здесь IF Pos(S,Str[t])>0 then, остальные меры дают только несколько наносекунд.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.013 c
14-58903
sagchat
2003-08-29 11:56
2003.09.18
The Bat


7-58949
Atom
2003-07-02 17:39
2003.09.18
Работа с Com портом


8-58783
Stas Kmet
2003-05-20 19:30
2003.09.18
MP3 Radio


3-58523
AlexWeb
2003-08-27 21:14
2003.09.18
Как подключиться к базе в локальной сети?


3-58549
Blondin
2003-08-27 14:46
2003.09.18
IBХ -виды транзакций




   Наверх