我有一个客户端/服务器应用程序,它依赖于 MS SQL 数据库进行后端存储,服务器应用程序是一个 WCF TCP 服务,它通过从数据库信息集中进行选择来处理客户端请求。
该服务配置为 PerSession 并支持 500 个会话。在客户端,用户可以打开不同的视图,每个视图都有一个我的服务对象(代理对象),所以每个视图都是一个会话;每个视图都有一个线程计时器,每秒使用代理对象从服务器请求数据。
该应用程序对于具有 8 个视图的少量用户运行良好,但是当我增加数量时,SqlConnection.Open 中发生超时异常,因为连接池中没有可用的连接。
每个视图都有会话/对象,因为 WCF 服务不是线程安全的;它依赖于使用 SqlDataReaders 和 SqlAdapters 的单线程数据库访问层。
有没有办法增加数据库连接的数量?好像800是最高的!!从您的角度来看,我怎样才能增加用户数量?
我是否应该更改 DB 层并使其成为多线程并使 WCF 服务单一?我认为这是设计中的瓶颈(您能推荐一篇关于 ADO.net 中的多线程的文章)
PS:
我可以用内存数据库或任何更快的存储替换数据库吗?
根据答案:
我更改了后端服务以关闭每个方法调用的连接,但我面临同样的问题,因为用户数量增加了延迟增加(超过一秒),这是否意味着我必须更改数据库解决方案?什么是替代解决方案?
之后:
我尝试了两种解决方案
- 每个方法调用打开和关闭 sql 连接
- 增加连接字符串中连接池的大小
但是,如果我增加用户数量,两者都会给我带来延迟,同时我监控 sql porfiler 中的查询,似乎每个查询不会超过 20 毫秒。