首先感谢您百忙之中抽空看我的问题。这是我第一次发帖!欢迎任何有关改进我的问题的建议。
最近,我开始编写自己的游戏。我已经创建了一些较小的游戏,但是,我计划编写一个更大的游戏。我希望能够使用依赖注入(inject)。但是,我偶然发现一些评论,表明使用 DI 时会对应用程序运行时的性能产生影响。
由于运行时性能在实时应用程序中非常重要,我想知道依赖注入(inject)的影响有多大?您将如何尽量减少这种影响?
目前,我计划使用 Spring 框架。这是一个明智的选择吗?或者我应该选择更轻量的东西?
最佳答案
DI 通常用于在应用程序开始时将大部件连接在一起,这不是我关心的事情。无论如何,我都会这么做。关于 DI 的一些更密集的使用,很难说,但我不会太担心。一切都经过优化,成本类似于查找和反射。
为了使用 DI,您根本不需要任何框架。 DI 是“注入(inject)”依赖项而不是使用全局变量或类似的想法。有些人更喜欢手动连接他们的应用程序。它并不像听起来那么糟糕,而且没有任何开销。所以你真的应该选择 DI。在速度很重要的情况下,结合手动注入(inject)的方法是解决性能问题的简单方法,因此您不会后悔使用 DI。
如果您想要的只是 DI,那么我建议使用 Guice。与此同时,Spring DI 可以在没有长度 XML 的情况下工作,而 Guice 始终是用 Java 进行配置的,这是我非常喜欢的。它感觉更像是一个库而不是框架,因为它很容易使用(大多数类根本不需要配置,许多其他类只需要一行)。
Dagger
Dagger 是一个在编译时工作的 DI 框架:它是一个注释处理器,可以找出所有依赖项并生成将您的应用程序链接在一起的代码,而无需任何反射。
Google 大量使用 DI,其规模的开销不可忽略。他们将一些项目从 Guice 切换到了 Dagger 和 IIRC,他们获得了大约 10% 的性能。
关于java - 使用依赖注入(inject)时会对运行时性能产生影响吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41626646/