Difference between revisions of "Пример сравнения функций строк-массивов и таблиц"
m (1 revision imported) |
|
(No difference)
|
Latest revision as of 07:55, 7 February 2021
Пример разницы в скорости и сложности программирования для конъюнкции двух текстовых массивов. Данный пример выполнялся для процессора i5.
Randomize(1); //Подготовка: //Создание и заполнение двух строк с префиксами, разделенной строками _NEWLINE //Строки будут иметь формат: <Префикс-индекс> Chr(1) <Случайная строка> //Также заполнение двух таблиц такими же значениями aTab:=Tab.Create("Индекс,Значение,ФлНайден"); aTab2:=Tab.Create("Индекс,Значение"); аСтр:=""; аСтр2:=""; //Вариант 1: количество элементов: 10000, длина одного элемента: 5, количество одинаковых элементов (длина результата): 928 //Вариант 2: количество элементов: 100000, длина одного элемента: 7, количество одинаковых элементов (длина результата): 1043 For i:=1 To 10000 Do //Изменить для варианта 2: 100000 бСтр:=Str(Random(10))+Random(10)+Random(10)+Random(10)+Random(10);//Добавить для варианта 2: "+Random(10)+Random(10)" бСтр2:=Str(Random(10))+Random(10)+Random(10)+Random(10)+Random(10);//Добавить для варианта 2: "+Random(10)+Random(10)" AppendStringToBufferedString(аСтр,Str(i)+Chr(1)+бСтр+_NEWLINE); AppendStringToBufferedString(аСтр2,Str(i)+Chr(1)+бСтр2+_NEWLINE); aTab.AddLine("Индекс,Значение,ФлНайден",i,бСтр,0); aTab2.AddLine("Индекс,Значение",i,бСтр2); EndDo; ProfilerClear(); ProfilerStart(); JoinStringValues(аСтр,аСтр2,_NEWLINE,"AND",Chr(1)); //Функция выполнялась: //Вариант 1: 245 мс. //Вариант 2: 22.9 с. aTab.Sort("Значение"); aTab2.Sort("Значение"); aTab2.Select(); While aTab2.Next() Do If aTab.FindAndGoto(aTab2.Значение,,"Значение",1) Then aTab.ФлНайден:=1; EndIf; EndDo; aTab.CurLine:=0; aTab.RemoveLocated("ФлНайден",0); //Конструкция была выполнена за: //Вариант 1: 148 мс. //Вариант 2: 6.9 с. ProfilerStop(); DebugBreak; Message("Done!"); //Таким образом в первом случае скорость выполнения строк-массивов меньше на 65.5%, // во втором случае, когда массив стал в 10 раз больше и количество совпадающих элементов уменьшилось, скорость выполнения строк-массивов стала меньше в 3.32 раза. //Вывод: для очень больших массивов рекомендуется пользоваться стандартными методами, даже если начальные данные получены в виде строки с разделителями.