Комментарии 9
Моя тестовая реализация MessagePack-а работала на ~20% быстрее чем neuecc/MessagePack-CSharp, а более быстрого сериализатора я пока не видал.
Я то думал что там реализована генерация IL кода, что может в теории работать даже быстрее кода на C#:
- Utilize dynamic code generation to avoid boxing value types. Use AOT generation on platforms that prohibit JIT.
- Heavily tuned dynamic IL code generation to avoid boxing value types. See DynamicObjectTypeBuilder. Use AOT generation on platforms that prohibit JIT.
Генератор C# кода там тоже есть как раз для Unity, тоже на основе Roslyn, Pre Code Generation(Unity/Xamarin Supports).
If you want to avoid generate cost or run on Xamarin or Unity, you need pre-code generation. mpc.exe(MessagePackCompiler) is code generator of MessagePack for C#. mpc can download from releases page, mpc.zip. mpc is using Roslyn so analyze source code.
Я то думал что там реализована генерация IL кода, что может в теории работать даже быстрее кода на C#
Сейчас, у меня нет точного ответа за счет чего получился буст. То что сразу просается в глаза, это возможность более полноценого inlining-а методов. В моей реализации у компилятора больше места где развернутся, поскольку все реально извесно на этапе компиляции.
Генератор C# кода там тоже есть как раз для Unity, тоже на основе Roslyn, Pre Code Generation(Unity/Xamarin Supports).
Я видел, но не пробовал. Показалось не очень удобным с точки зрения конечного использования.
Я видел, но не пробовал. Показалось не очень удобным с точки зрения конечного использования.
Запустил бенчмарк с кодогенерированым MessagePack — стало на 10% медленей)
То что сразу просается в глаза, это возможность более полноценого inlining-а методов.
А там разве не испольуется AggressiveInlining для критичный методов? Хотя не совсем понимаю зачем его использовать, если jitter по идее и так может инлайнить маленькие методы если посчитает нужным.
А вы проверяли свой проект на Rider? Когда на вожу на вызов метода, подчёркнутый красным — выводит «Simple reflection is not ready». При нажатии «Generate simple reflection» ничего не происходит.
Проверял и он там не работает. Баг в трекере есть, но когда его починят не известно.
youtrack.jetbrains.com/issue/RIDER-31659
youtrack.jetbrains.com/issue/RIDER-31659
del
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Кодогенерация при помощи Roslyn