当前位置: 首页 > 知识库问答 >
问题:

ASP.NET核心单例实例与瞬态实例性能

臧曜瑞
2023-03-14

在ASP.NET核心依赖项注入中,我只是想知道注册singleton实例是否会比注册transient实例更好地提高性能

在我看来,对于singleton实例,只需要花费一次创建新对象和依赖对象的时间。对于transient实例,将对每个服务请求重复此代价。所以singleton似乎更好。但是,使用singleton比使用transient能获得多大的性能?提前谢谢!

共有1个答案

隆向晨
2023-03-14

就像其他人所说的,绩效不应该成为你的决定:无论哪种方式,绩效都不会受到显著的影响。您应该考虑的是依赖关系,不管是托管的还是非托管的。当您使用有限的资源(如套接字和连接)时,单例是最好的。如果每次注入服务时都必须创建一个新的套接字(瞬态),那么套接字很快就会用完,然后性能就会受到影响。

当资源使用是暂时的并且影响最小时,瞬态作用域更好。例如,如果您只是在执行计算,那么它可能是暂时作用域,因为您不会因为拥有多个副本而耗尽任何东西。

当状态重要时,您还希望使用单例作用域。如果某些东西需要在一个特定的操作之后持久存在,那么瞬态将不起作用,因为您将没有状态,因为每次注入时它基本上都将重新开始。例如,如果您试图协调一个并发队列,使用锁的信号量,那么您肯定需要一个单例范围的服务。如果状态无关紧要,那么瞬变可能是更好的范围。

现在,ASP.NET Core的DI既有“瞬态”生存期,也有“作用域”生存期。从它们来去的意义上说,这两个都是“瞬态”的,但“作用域”是每个“作用域”(通常是一个请求)实例化一次的,而“瞬态”总是在每次注入时实例化。在这里,您应该使用“scoped”,除非您有一个好的、明确的理由使用“transient”。

 类似资料:
  • 本文向大家介绍asp.net实现简单分页实例,包括了asp.net实现简单分页实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了asp.net实现简单分页的方法。分享给大家供大家参考。 具体实现方法如下: 希望本文所述对大家的asp.net程序设计有所帮助。

  • 我有两个例子。一个是项目,一个是模块。< code >一对多关系。 我将模块设置到项目中。然后使用。第一次,因为数据库中没有记录,所以项目和模块可以保存到数据库中。然而,第二次,因为我不需要创建新项目,我只创建新模块,然后将模块设置回项目。 发生异常。 对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例。 有什么办法可以解决这个问题吗谢谢

  • 错误是:by:javax.el.elexception://jsf/submit.xhtml@20,76 listener=“#{banklocationmb.savelocation}”对象引用了一个未保存的瞬态实例-在刷新之前保存瞬态实例 尝试添加级联持久化,我收到以下错误 org.springframework.orm.jpa.jpasystemexception:org.hibernate

  • 上图显示了表之间的关系。 AddressType表包含静态值,如mailing、home、work等。 在AddressTypeRel模型类中,我有一个带有多对一注释的AddressType对象

  • 问题内容: 有效的Java-要保持单例保证,您必须声明所有实例字段都是瞬态的,并提供一个“ readResolve”方法。通过在此处声明瞬态场能实现什么?这是一个示例: 无论我是否将’state’变量声明为瞬态,我都会将c.getState()gettign打印为25。我在这里缺少什么吗? 问题答案: 通过使属性变为瞬态而获得的好处是,您无需序列化状态。序列化是不必要的,因为无论如何它都会被rea

  • 我目前正在做一个项目,我遇到了这个错误: 发生了什么:1。)我在登录后设置了一个会话范围变量,比如SessionScopeVariableA。 2.)然后我有一个页面,我在其中添加一个实体,比如EntityA。 3.)EntityA有一个惰性字段sessionScopeVariableA,所以当我调用add方法时,我必须设置这个变量。 4.)请注意,SessionScopeVariableA被包装