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 раза.
//Вывод: для очень больших массивов рекомендуется пользоваться стандартными методами, даже если начальные данные получены в виде строки с разделителями.