如果我有一个以Transient
注入的服务,但是它有一个对IMemoryCache
的依赖关系,它以Singleton
的形式注入到构造函数中,这会导致内存泄漏?由于对IMemoryCache
的引用,因此似乎永远不会将临时服务作为GCd。是这样吗?
答案 0 :(得分:2)
将单例注入瞬态无关紧要,每次都会获得一个新的瞬态服务实例,但是每次都会向其注入相同的单例。如果您不持有对瞬态服务的任何引用,则会被收集。
您可以在以下问题中了解有关单例,瞬态和作用域工作原理的信息:AddTransient, AddScoped and AddSingleton Services Differences?
更新
因为您的单例服务将在您的应用程序运行时存在第一次注入,所以它永远不会被收集。解析程序将始终完全引用该单例服务。但是,对瞬态服务的引用将不存在,因此即使保留了对单例的引用,也将对其进行垃圾收集,而对单例的垃圾收集并不取决于瞬态服务的寿命范围。
PS
如果要监视内存泄漏,请阅读以下内容: https://devblogs.microsoft.com/devops/diagnosing-memory-issues-with-the-new-memory-usage-tool-in-visual-studio/