Здравствуйте, Философ, Вы писали:
Вот анализ от Gemini (прямо из гугл-поиска):
Оценка производительности кода: Квадратичная сложность O(n²)
Данный код имеет квадратичную сложность O(n²) в худшем случае, где 'n' — количество элементов в списке keys.
Итерация по списку дает базовую сложность O(N).
Ключевая проблема: Хотя keys.Remove(node) выполняется за O(1) (константное время, так как передается сам узел), алгоритм модифицирует список во время итерации.
При многократном вызове метода общая производительность становится очень низкой.
Код неэффективен из-за использования LinkedList для такой операции.
Рекомендация: Использовать более эффективные структуры данных, такие как HashSet<string> или Dictionary<string, ...>, или специализированные структуры вроде Trie (префиксное дерево), что позволило бы достичь эффективности O(1) для поиска и удаления.
Пепел анализом я его заставил найти код Remove. Потому он делает правильные предположения о сложности удаления.
И в общем, я с его выводами согласен. Хотя твой приведенный фрагмент и O(N), но он же ведь явно где-то еще вызывается.
И код явно дерьмовый. Какие ref (причем без указания на то нашелся узел или нет) и "false ==". LinkedList какой-то. В общем, дичь какая-то.
Почему, действительно, не использовать HashSet или словарь?
Покажи код взывающий эту функцию.
Вот этот же index он не из воздуха берётся? Его же по этому списку вычисляют? Ну вот тебе и низкая производительность.