使访问db static =坏
本文关键字:static db 访问 | 更新日期: 2023-09-27 18:03:12
在我所做的几个。net c# webservice项目中,我使用了单例模式来访问db static。然后有一天我的朋友告诉我,这是一件不好的事情,因为如果对同一个数据库实体发出了很多请求,那么数据库就会因为静态实例而被锁定。我朋友的假设对吗?我认为每个新请求都会创建一个类的新实例?
单例类的实现是这样的:
public class WebService
{
private readonly IFactory _factory;
public WebService(IFactory factory)
{
_factory = factory;
}
public IDataRepository Data
{
get
{
return _factory.GetDatabase();
}
}
}
public static class WebServiceImpl
{
private static readonly WebService _webService = new WebShop(new WebserviceFactoryImpl());
public static WebService webService { get { return _webService; } }
}
_factory.GetDatabase()返回一个Database类的新实例。
查看WebServiceImpl
,所有调用将共享单个WebService
实例。现在,这不一定是一个问题,取决于它是如何实现的;例如,如果_factory.GetDatabase();
最终被每个请求调用,那么它可能是你正在摆脱它。进一步取决于GetDatabase()
所做的—即每次调用是否获得一个新实例?还是每次都给你相同的实例?很简单:我们没有足够的信息来全面回答这个问题。但是:
- 在请求之间共享单个数据库连接是危险的;要么你需要锁定/同步,要么你冒着大量错误的风险(数据库连接通常不是写为线程安全的)
- 在请求之间共享ORM甚至更糟:除了上面的所有问题之外,您还会遇到数据在身份/对象缓存中积累的问题;ORM实例(数据-上下文等)旨在是短暂的,然后被丢弃(有时:丢弃)