Для начала переписал алгоритм, теперь он за вызов производит сразу все расчеты и прогнал его через юнитевый профайлер. Который показал что самая тяжелая функция вызывается QSolver.SolveBiQuadsEquation порядка 20тыс раз и суммарно весь расчет генерит 20мб аллокаций. Тут ничего особенного: было много аллокаций массивов - аллоцируем 1 раз и дальше переиспользуем, постоянные аллокации различных небольших классов - переводим на структуры и тд. В результате вместо 20мб теперь всего 100кб. При таких оптимизациях не забываем про потенциальную многопоточность, те аккуратнее со static полями.
Заменил бы картинку на превью, а то в ленте выглядит как очередной скам от ботов.
Доеду с работы до дома, сделаю. Спасибо 👍
Не видел исходников, но сразу 2 момента (на стороне C#) - выделение происходит на куче, как я понял? может на стек перенести? И второй, может использовать небезопасный код с указателями для хотя бы какого повышения производительности?
А что хранить в стеке?
Небезопасный код похерит детерминизм.
достаточно было просто переиспользовать аллоцированную один раз память при инициализации солвера
хотелось бы поподробнее конечно.
я тоже могу картинки сгенерить и ссылки на Вики дать будто я что-то делаю ;)
С удовольствием почитаю) подробности не могу сейчас к сожалению, только после релиза. 1-2 месяца.