首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Open与OpenAsync (SqlConnection)的区别

Open与OpenAsync (SqlConnection)的区别
EN

Stack Overflow用户
提问于 2017-01-12 05:14:38
回答 1查看 3.2K关注 0票数 3

(标题看起来类似于SqlConnection.Open对SqlConnection.OpenAsync --这两者之间有什么不同?,但a.它没有任何答案,b.在我的例子中的观察结果是不同的)

虽然为了在asp.net服务中解决性能问题而进行了工作台标记,但我意外地碰到了一个奇怪的观察,其中SqlConnection.Open的性能要比SqlConnection.OpenAsync好得多(下面是更多的细节)。

从源代码来看,这里看起来像Open的代码只是OpenAsync的一个子集。差分这里

我很好奇,如果Open做的事情和OpenAsync完全一样,那么使用异步版本(如果有的话)有什么好处呢?

详细信息:

我就是这样创建连接的

代码语言:javascript
运行
复制
using (SqlConnection connection = new SqlConnection(connectionString))
{
    await connection.OpenAsync();
    // run actual operation on connection (in an async way)
}

这个代码块采用13 seconds on an average for 100 concurrent calls。我尝试将线程池计数增加到200,以减少tasks等待线程的机会。即使在默认线程池计数之后,观察结果也不会改变。

有趣的是,如果我用await connection.OpenAsync()更改connection.Open(),性能会提高10倍。1.01 seconds on an average of 100 concurrent calls

我试着玩connection pool settings,看起来即使我把它减少到一个任意低的数字(测试的是2),这个数字也不会有太大的变化。

司机代码是:

代码语言:javascript
运行
复制
Task.WhenAll(Enumerable.Range(0, maxConcurrentCalls).Select((idx) => CallQuery(idx))).Result;

我做等待的原因(通过执行.Result,是因为驱动程序代码是一个控制台应用程序,必须有一个同步main)。在实际的生产代码中,包括控制器在内的所有东西都是async

EN

回答 1

Stack Overflow用户

发布于 2020-09-26 15:44:03

我使用OpenAsync的一种方法是,如果我有到多个数据库的开放连接。

代码语言:javascript
运行
复制
Task t = conn1.OpenAsync();
conn2.Open();
t.Wait();

如果连接到远程服务器的速度较慢,则Open可能需要几秒钟时间。这样,两场公开赛是平行进行的。

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

https://stackoverflow.com/questions/41605572

复制
相关文章

相似问题

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