java - 使用依赖注入(inject)时会对运行时性能产生影响吗?

标签 java performance dependency-injection game-engine

首先感谢您百忙之中抽空看我的问题。这是我第一次发帖!欢迎任何有关改进我的问题的建议。

最近,我开始编写自己的游戏。我已经创建了一些较小的游戏,但是,我计划编写一个更大的游戏。我希望能够使用依赖注入(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/

相关文章:

java - tcp端口在java中接收数据很慢,但在php中接收数据很快

c# - 使用枚举 C# 为具体类创建接口(interface)?

java - 电子邮件中缺少消息,具体取决于正文部分添加的顺序

java - 如何使用 Lucene 存储值对

c# - 如何像终端一样用Android SDK执行命令?

java - 在类的构造函数中找出实例化对象

php - 使用 Asterisk PHP 脚本匹配电话前缀的最快方法

javascript - 在javascript中获取用户帧率

asp.net-mvc - 我应该为每个模型创建一个接口(interface)吗?

c# - ASP.NET:依赖注入(inject)和角色