Как вы уже знаете, любая инфраструктура внедрения зависимостей в какой-то момент должна построить своего рода граф зависимостей объектов, которые требуются вашему приложению.Построение этого графа часто является наиболее дорогостоящей частью структуры DI.
Guice вычисляет этот график, используя отражение во время выполнения.Dagger генерирует код, который представляет граф зависимостей во время компиляции.Я не знаю, какой из них быстрее, но я знаю, что использование отражения вызывает нетривиальный удар по производительности.
Однако самое большое отличие состоит в том, что Dagger выполняет всю тяжелую работу во время компиляции (что означаетвы выполняете работу один раз, независимо от того, сколько раз вы ее выполняете), тогда как Guice должен выполнять эквивалентную работу каждый раз при запуске приложения.
Теперь, чтобы ответить на ваш вопрос, предпочтительнее использовать Dagger, если ваше приложение часто запускается и останавливается.С чем-то вроде мобильного приложения, более медленное время запуска в основном просто ухудшает UX.С Lambda не только он замедляет время холодного запуска, но и поскольку вы оплачиваете количество времени, в течение которого работает ваш код, на самом деле это будет стоить вам больше денег, чтобы постоянно перестраивать граф зависимостей.
TLDR; В Lambda предпочтительнее использовать Dagger (как для времени холодного запуска, так и для стоимости), поскольку он перемещает самую дорогую часть инфраструктуры DI для компиляции, а не во время выполнения,