静态方法与.Net中的非静态方法

时间:2018-05-28 18:40:25

标签: c# .net concurrency static-methods non-static

我正在使用.Net Core中的API工作,最近我遇到了业务层使用所有静态方法的情况。这会导致什么样的问题?

  • 当API有请求时,它会实例化一个新线程,对吗?然后静态方法将占用内存的两倍?
  • 会有性能损失吗?因为线程之间会有更多的并发性,并且取决于机器的处理器,这将是至关重要的。
  • 应用程序死亡时将释放内存。也就是说,在应用程序运行时,永远会占用额外的内存。

1 个答案:

答案 0 :(得分:0)

对于通过API呈现服务,您无法静态声明您的方法(特定操作);因为,API上下文或更好地表示必须初始化控制器(按请求)以呈现服务(获取传入请求并将响应写回http上下文)。

但是如果不是这种情况,静态方法声明实际上可以帮助您提高性能,因为它可以静态调用而无需实例化对象。然而,这不是一个好的设计(也不是真的很糟糕)。重要的是,您必须很好地分析场景,以确定您是否真的可以利用功能编程所获得的模块化而不是面向对象的方法。

为了更加专业地为您分解,有一种通常称为Singleton模式的设计模式,其中一个对象在程序的生命周期中只创建一次,并且一个实例与之共享所有试图访问该类型的实体。那说;它一点都不差,但再一次,你必须很好地分析这个场景。

例如:单例实体框架上下文是一个坏主意,因为上下文可能会被丢弃,您将丢失所有更改,跟踪数据等。另一方面,单例ADO.Net上下文是个好主意如果你遵循每个静态方法的单一责任的概念。