我们从 .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 4.8 迁移到 .NET Core 中的通用托管,所以“东西确实发生了变化”。我们无法查看您注册的内容或注册方式。这就是为什么每个问题都应该有 最小再现。 但是,如果是我,我会看的东西:
如果您正在进行程序集扫描来注册事物,那么您可能不再扫描相同数量的事物。不同的框架,构建输出中的不同程序集集。准确注册您需要的内容,确保您不会浏览世界。如果您使用 AnyConcreteTypeNotAlreadyRegisteredSource 来尝试“自动注册”,那么您将有一组不同的内容需要“自动扫描”。不要用这个。