2010-06-12 68 views

回答

3

这其实并不重要。当您使用ADO.NET(其中包括Linq to SQL,NHibernate和任何其他ORM)时,该库使用连接池。您可以“关闭”并“重新打开”逻辑连接十几次,但同一个连接将始终保持打开状态。所以不要过多关心连接是否打开或关闭。

相反,您应该尝试限制每页必须运行的查询数,因为每次往返都会产生大量开销。如果您在每个页面上显示相同的数据,请缓存结果,并设置缓存依赖性或到期日期,如果它不经常更改。还可以尝试通过使用适当的连接和/或急切的加载来重用查询数据(如果您使用的是延迟加载的ORM)。

即使数据在每次页面加载时都会完全不同,您将通过使用返回多个结果集的单个存储过程获得更好的性能,而不是单独运行每个查询。

底线:忘掉连接策略并开始担心查询策略。每页超过3-5个查询,您可能会遇到严重的规模问题。

0

如果您确信交易将很快完成,那么请使用单个连接。

务必检查所有返回结果并在可能的情况下将所有内容都包含在异常处理中。

+0

@should我只是存储一个缓存的连接对象 – leora 2010-06-12 14:07:33

0

为避免不必要的开销,最好使用单个连接。但一定要在“try”块中运行查询,并在“finally”块中关闭连接,以确保不会挂起连接。

try-finally

+2

或使用'using'语句 – 2010-06-12 13:53:08

0

的UnitOfWork ??这是一个很好的策略。 nhibernate和许多其他人使用这种模式。

给它一个满足您的要求具体细节一个谷歌..

吉姆

1

如果您在ADO.NET的常规页面上运行多个查询,那么它们将按顺序运行,并且连接池将意味着它无关紧要。最佳做法是按需打开连接并立即关闭连接 - 即使是在同一页面中进行多个查询。连接池使得这个效率很高。

当您使用多个查询时,通过同时打开多个连接并使用异步ADO来确保所有请求在多个线程中同时运行,可以显着提高性能。在这种情况下,您需要每个查询的连接。但整体连接时间会缩短。

在单一连接上也可能使用MARS,但我并不是那种支持者,并且在功能上受到很多限制。

相关问题