Я думаю, что вы неправильно используете EnglishStringList (TStringList).Это отсортированный список, вы добавляете элементы (строки), вы сортируете их, но при поиске вы делаете это с помощью неполной строки (только имя, с IndexOfName ).
Если вы используете IndexOfName в отсортированном списке, TStringList не сможет использовать двухсотомный поиск.Используется последовательный поиск.
(это реализация IndexOfName)
for Result := 0 to GetCount - 1 do
begin
S := Get(Result);
P := AnsiPos('=', S);
if (P <> 0) and (CompareStrings(Copy(S, 1, P - 1), Name) = 0) then Exit;
end;
Я думаю, что это является причиной низкой производительности.
Альтернативой является использование 2 TStringList:
* Первый(отсортировано) содержит только «Имя» и указатель на второй список, содержащий значение;Вы можете реализовать этот указатель для второго списка, используя «указатель» свойства Object.
* Второй (не отсортированный) список содержит значения.
Когда вы ищете, вы делаете это в первом списке;В этом случае вы можете использовать метод Find .когда вы найдете имя, указатель (реализованный с помощью свойства Object) даст вам позицию во втором списке со значением.
В этом случае метод Find в Sorted List более эффективен, чем HashList (который должен выполнять функцию, чтобы получить позицию значения).
С уважением.
Pd: Извините за ошибки с английским.