【问题标题】:Is it more efficient to have static classes than non static classes in c# asp.net? [closed]在 c# asp.net 中使用静态类是否比非静态类更有效? [关闭]
【发布时间】:2013-07-11 16:49:07
【问题描述】:

在 asp.net/c# 中,作为多人连接到站点的服务器端解决方案,我有多个类。但是,如果它们保持非静态,我最终只会创建其中一个对象。我想知道将它们设为静态类是否更有效,或者将它们保留为非静态并创建 1 个对象并使用它。

谢谢。

【问题讨论】:

  • 您可能需要考虑使用依赖注入。 en.wikipedia.org/wiki/Dependency_injection
  • 他们做完全不同的事情,所以比较他们的表现并不重要。要么您需要该类型的实例,因为您正在利用实例字段,并且方法应该是非静态的,或者不依赖于实例字段并且它们应该是静态的不管性能如何因为那里没有依赖。两者中只有一个实际上代表了您正在做的事情,请使用哪个。使用“其他”选项,当它没有意义时,即使它确实有微小的性能差异,也不值得这样做。
  • 比什么更有效率?什么是“效率”?其他指标可能更重要。可维护性、可读性和可扩展性浮现在脑海中。
  • 我认为这取决于你想用这个类做什么。只有实用程序类之类的方法?

标签: c# asp.net performance object static


【解决方案1】:

类和静态类不可互换。

您的静态类在对您的服务器的请求之间共享。它们也与应用程序域一样长。

类实例不同,会为每个请求单独创建,每个请求都有自己的数据。

静态类可以稍微快一点,因为不需要每次都创建实例,但在大多数情况下差异可以忽略不计。由于数据在请求之间共享并且存储时间更长,因此静态类可能会出现数据同步和内存使用问题。

【讨论】:

    【解决方案2】:

    静态类会更快。轻微地。但是非静态类为您提供了极大的灵活性,放弃它将是一种耻辱。你可能永远不需要它,但如果你需要它,很高兴知道它就在那里。

    示例:

    有一天,您可能想要其中一个课程的两个或多个副本。今天是你整个宇宙的东西可能是明天系统的一小部分。今天是什么太阳明天只是 100,000 颗星星中的一颗。

    您可能会发现向方法传递单个实例的修改副本很方便。这使您可以将编写的代码与官方的单个实例一起用于其他用途。

    非静态类可以扩展其他类和接口。您的几个单实例类可能想要实现一个接口,以便它们有时可以相互替代。并且有几个可能共享相同的功能并希望从另一个类继承。

    (而且肯定还有很多其他好的理由。)

    【讨论】:

      猜你喜欢
      • 2011-09-27
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 2014-01-17
      相关资源
      最近更新 更多