C#静态方法与对象实例

Chr*_*ase 5 c# model-view-controller static-methods factories

我目前正在开发一个C#MVC REST web api,我正在尝试为我们的设计选择两种可能性之一.

在不深入设计的情况下,我们打算建立一个数据访问类,我们将其称之为DataSource.每个人DataSource都需要执行小的,包含的逻辑块来正确地构建适当的响应.由于希望将来能够加载代码,我们不希望简单地将这些功能打开DataSource,而是希望它们由其他程序集提供.我们已经实现了这个概念的证明,到目前为止,这么好.

我想要决定的是使用单个静态ExecuteQuery函数编写静态类,或者编写工厂方法来创建这些类的实例,这些类具有一个名为的实例方法ExecuteQuery.

每次请求创建多个短期对象与调用静态方法之间的性能考虑因素是什么?

直观地说,静态方法会更快,但我已经预料到我会通过反射来调用它们(以支持热负载的代码要求).

如果对短命物体没有巨大的惩罚,那么他们可能会单凭简单性而获胜.

有关我们预期负载的相关信息:

  • 响应时间在300ms - 800ms范围内
  • 大约2000个Web客户端的平均负载
  • 峰值负载约4000个客户端
  • 客户端每2到5秒进行一次查询
  • 客户端峰值速率每秒1次查询

此外,每个DataSource实例最多可创建8个,平均3个实例.

Kri*_*ten 1

使用静态类,将调用委托给实现类。

这些实现类应该实现一个公共接口,这将允许您无需反射即可调用它们的方法。当然,静态方法不能实现接口方法。接口实现必须是实例,您需要某种工厂来实例化它们。如果它们存在于外部程序集中,我强烈建议您查看托管扩展性框架 (MEF),请参阅http://msdn.microsoft.com/en-us/library/dd460648.aspx

每个请求创建多个短期对象与调用静态方法之间的性能考虑因素是什么?鉴于这些方法将进行数据访问,因此性能影响完全可以忽略不计。

如果您使用 MEF,框架将为您创建类似单例的实例。

如果您自己扮演角色,并且希望无需多次创建这些对象,则可以在它们上实现单例模式。