Autofac Resolve 在 .NET Generic Host HostApplicationBuilder 中非常慢

问题描述 投票:0回答:1

我们从 .net Framework 4.8 开始就一直在使用 Autofac,它的性能看起来一直很好。然而,当我们尝试在基于 .net 通用主机 HostApplicationBuilder 的控制台应用程序中使用完全相同的代码时(https://learn.microsoft.com/en-us/dotnet/core/extensions/generic-host?tabs =appbuilder),它在解析 Autofac 范围内相当重的组件时速度非常慢,我花了大约 5 秒的时间。相同的代码在.net Framework 4.8之前只需要0.1秒。

此组件还包括 EF dbContext 创建,但我认为这不是问题,因为它在以前的 .net 版本中工作正常。

尝试通过 Autofac ContainerBuilder 解析组件的示例代码如下:

using(var scope = _container.BeginLifetimeScope())
{
    var component = scope.Resolve<MyComponent>();
}

有人见过类似的问题吗?

非常感谢您的帮助。

.net console-application autofac
1个回答
0
投票

显然这里没有足够的信息来帮助您或进行任何真正的故障排除。例如,我们无法告诉您转换应用程序时发生了什么变化或如何变化。显然,这不是“字面上完全相同”的相同代码,因为您从 .NET 4.8 迁移到 .NET Core 中的通用托管,所以“东西确实发生了变化”。我们无法查看您注册的内容或注册方式。这就是为什么每个问题都应该有 最小再现。 但是,如果是我,我会看的东西:

如果您正在进行程序集扫描来注册事物,那么您可能不再扫描相同数量的事物。不同的框架,构建输出中的不同程序集集。准确注册您需要的内容,确保您不会浏览世界。

如果您使用 AnyConcreteTypeNotAlreadyRegisteredSource 来尝试“自动注册”,那么您将有一组不同的内容需要“自动扫描”。不要用这个。
  • 使用诊断来确定时间都去哪儿了。
  • 使用分析器找出时间都去哪儿了。
  • 性能问题不会是 Autofac,而是与您注册的内容以及 Autofac 为依赖链找到正确类型的速度有关。链中每个对象的构造函数都是有成本的。您可以使用可用的工具来分析时间的去向。

© www.soinside.com 2019 - 2024. All rights reserved.