【发布时间】:2016-09-22 20:00:43
【问题描述】:
我有一个实例类,它实现了一个接口,并且除了接口方法之外的所有方法都是静态的。所有的类变量也是静态的。其中两个静态变量实际上是实例变量并标记为只读。这些只读实例变量是内联初始化的。
这是一个例子
public class Test : ITestInterface
{
public static readonly DbConnection Connection = new DbConnection();
public void static TestMethod1(){
}
public List<string> static TestMethod2(){
}
}
我的框架层中有很多使用静态连接变量的方法。
这是一个有效的设计吗?我想对我的所有 API 调用使用相同的对象。这个想法是避免创建多个连接对象。在客户端调用负载的任何一天,都有可能创建 10,000 个连接对象。我试图避免这种情况。
【问题讨论】:
-
这就是连接池的用途。连接对象应该是短暂的。在最后一刻创建它并尽快销毁它。让连接池负责创建/池连接以供重用。
-
这不是Sqlconnection,它是一个第三方消息系统连接类。
-
我严重怀疑这个第三方连接是线程安全的,这将使它很难正确使用。除非你真的只从一个线程调用它。您遇到的另一个主要问题是如果连接中断并变得无法使用会发生什么。你将如何安全地重新初始化它?
-
谁关闭了连接?如果它使用非托管资源,谁来处理它?如果您尝试打开一个已经打开的连接怎么办?它是线程安全的吗?这些是静态资源造成的一些问题。创建数千个连接对象是否存在问题?
-
当它的范围受到限制(在本例中为私有)并且永远不会进入无效状态时。即使这样,也只有当它是线程安全的,或者使用锁定来保证只有一个线程可以访问它时。经典示例:
static readonly ILog logger = LogManager.GetLogger("name");.
标签: c# .net readonly reference-type