ASP.NET Core 中的依赖注入是否会增加性能开销?

Does dependency injection in ASP.NET Core add performance overhead?

我正在开发一个应用程序,其中避免了 DI 以提高性能。服务依赖性作为静态 class 实现,并在调用 class 中直接引用。这给测试带来了典型的挑战,因为不可能为此服务注入存根。

我的第一个想法是设置一个常规的 class 和接口,将其作为单例放入容器中,然后将其注入到调用 class 的构造函数中。此 API 应用对性能非常关键,因此设计选择不能增加任何额外的响应时间。

是否可以在不增加性能开销的情况下使用 DI?如果没有,是否有另一种设计模式可以用来保持性能,同时提高 class 的可测试性?

我 运行 一个简单的测试来验证这一点,发现使用来自 DI 的单例服务不会增加任何显着的性能开销。

我创建了一个带有接口的简单服务并将其注册到服务集合中。我创建了 2 个控制器。在一个中,我使用 new Service() 来获取实例,在另一个中,我通过构造函数注入了它。

我在发布构建模式下启动了该应用程序,并 运行 使用 K6 在每个控制器上进行了负载测试。使用 new Service() 的控制器平均耗时 184.94 微秒,使用注入的控制器平均耗时 186.07 微秒。

所以使用 DI 确实增加了轻微的(百万分之一秒)开销。这可能小到在使用 API.

时不会被注意到