首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接池比保持一个连接打开要慢

连接池比保持一个连接打开要慢
EN

Stack Overflow用户
提问于 2013-07-26 23:06:18
回答 1查看 736关注 0票数 4

在我们创建的客户端应用程序中,我观察到了连接池性能的一个有趣行为。每当用户单击某个对象时,都会从数据库加载更多特定于对象的数据。根据对象的不同,每次点击需要10到30次查询。

这是通过使用连接池完成的,每个查询都被分派到池中的一个新连接上,并在查询运行后关闭该连接。

我已经分析了分析器中的查询以进行性能优化,发现其中有许多审计登录/注销条目。此外,即使查询本身运行良好(只有索引查找/扫描操作符),性能也不是最优的。

只是为了尝试一下,我禁用了池化,并修改了代码,为每个客户端应用程序保留一个连接并重用它。这使得整个应用程序的响应速度大大提高,并且所有审计登录/注销条目都从分析器中消失了。

这怎麽可能?连接不应该保持开放吗,或者如果它们实际上保持开放,至少不应该这么慢?有没有可能我们错误地使用了SqlConnection类,从而导致禁用了池化?

我读过其他关于池化的帖子,但没有发现任何关于池化连接和重用相同连接之间可感知的速度差异的内容。

代码语言:javascript
复制
SqlConnection con = new SqlConnection(_connectionString);

该连接被移交给提供事务功能的包装类会话。

代码语言:javascript
复制
class Session{
    Session(connection);
    Abort();
    Commit();
}

在Abort()和Commit()中关闭连接。其中一个总是被称为。

EN

回答 1

Stack Overflow用户

发布于 2013-07-28 09:16:30

如果我没理解错的话--每个会话的连接都是“新的”。如果您希望所有实例共享该连接,则应将其设为静态连接。

将其放入global.asax:

代码语言:javascript
复制
public static SqlConnection con;

protected void Application_Start(object sender, EventArgs e)
{
    con = new SqlConnection(_connectionString);
}

这样,您将在会话之间共享相同的连接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17884908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档