我用静态方法在简单的静态类中实现了我的业务逻辑。这些方法中的每一个在调用时都会打开/关闭SQL连接:public static void DoSomething(string something){ using (SqlConnection connection = new SqlConnection("...")) { connection.Open(); // ... connection.Close(); }}但是我认为避免打开和关闭连接会节省性能。不久前,我用OleDbConnection类(不确定SqlConnection)进行了一些测试,它确实可以像这样工作(据我所记得)://pass the connection object into the methodpublic static void DoSomething(string something, SqlConnection connection){ bool openConn = (connection.State == ConnectionState.Open); if (!openConn) { connection.Open(); } // .... if (openConn) { connection.Close(); }}所以问题是-我应该选择方法(a)还是方法(b)?我读到另一个stackoverflow问题,即连接池为我节省了性能,我完全不必费心...PS。这是一个ASP.NET应用程序-连接仅在Web请求期间存在。不是Win-App或服务。
3 回答
慕的地8271018
TA贡献1796条经验 获得超4个赞
每次使用方法(a)。当您开始扩展应用程序时,处理状态的逻辑将变得非常痛苦。
连接池按锡说的做。只需考虑一下在应用程序扩展时会发生什么,以及手动管理连接打开/关闭状态会有多困难。连接池在自动处理此方面做得很好。如果您担心性能,请考虑使用某种内存缓存机制,以防止任何阻塞。
跃然一笑
TA贡献1826条经验 获得超6个赞
处理完连接后,请务必立即关闭它们,以便它们的基础数据库连接可以返回到池中,并可供其他调用者使用。连接池的优化非常好,因此这样做没有明显的损失。该建议与交易基本相同-完成后,请保持简短。
如果您在使用多个连接的代码周围使用单个事务遇到MSDTC问题,则情况将变得更加复杂,在这种情况下,您实际上必须共享连接对象,并且仅在完成事务后才关闭它。
但是,您在这里是手工做的,因此您可能需要研究为您管理连接的工具,例如DataSet,Linq to SQL,Entity Framework或NHibernate。
- 3 回答
- 0 关注
- 510 浏览
添加回答
举报
0/150
提交
取消