c# - Resolve在Unity中的性能和使用

标签 c# performance unity-container ioc-container

我们使用 Unity 作为我们的 IOC 容器。

到目前为止,我们的程序是以在需要使用接口(interface)之前解析接口(interface)的方式编写的。

然而,这会导致接口(interface)在循环内被解析。这可能导致接口(interface)在一次运行中被解析 100,000 次。

问题是:将解析移到循环外会有显着差异,还是这只是微优化?

我们的程序需要一天的时间才能运行。所以对于那些会回答“自己测试”的人来说,在这里问问题其实更快:)

最佳答案

这取决于你如何注册我会说的接口(interface)。你是用哪个 LifetimeManager 注册的?
你的程序总是需要一个新实例吗?或者它可以是一遍又一遍的同一个实例吗?

如果需要同一个实例(Singleton),使用ContainerControlledLifetimeManager:

Container.RegisterType<Interface, Implementation>(new ContainerControlledLifetimeManager());

如果你不关心你得到的是哪个实例(新的还是旧的,由GC维护),你可以使用ExternallyControlledLifeTimeManager:

Container.RegisterType<Interface, Implementation>(new ExternallyControlledLifeTimeManager());

您还可以创建自己的 LifetimeManager 实现,以更好地满足您的需求。

看看这篇关于 LifetimeManagers 的文章

关于c# - Resolve在Unity中的性能和使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9224954/

相关文章:

c# - 如何在 ASP.NET 中将空字符串设置为 DataSource 参数的默认值?

c# - 如何使用 MigraDoc 定义 PDF 大纲

python - 根据其他两个数组中公共(public)值的索引从数组返回值

c - 为什么交错工作时 TCP 写入延迟更糟?

c# - Prism,将 Views 和 ViewModels 与 Unity 连接起来,试图理解它

c# - 尝试将接口(interface)映射到 Unity 中的类类型时出现问题

asp.net-mvc - 在运行时使用 Unity 属性注入(inject)注入(inject) IPrincipal

c# - 伙计,我的线程在哪里? (或 : rename a . NET 线程池线程 - 这可能吗?)

c# - WCF 服务实时报告长时间运行的作业进度

sql - 在 SQL Server 中,什么是最有效的方法来确定我的数据在一个月中的哪个工作日和哪个星期