- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
(标题看起来与 SqlConnection.Open vs SqlConnection.OpenAsync - what's different between the two beyond the obvious? 相似,但是 a. 它没有任何答案,并且 b. 我的观察结果不同)
在对 asp.net 服务中的性能问题进行基准测试时,我不小心发现了一个奇怪的观察结果,其中 SqlConnection.Open
的性能远好于 SqlConnection.OpenAsync
(下面有更多详细信息)。
来自源代码here看起来 Open
的代码只是 OpenAsync
的一个子集。差异 here
我很好奇给定的 Open
做的事情与 OpenAsync
完全相同,使用异步版本(如果有的话)有什么好处?
详细信息:
这就是我创建连接的方式
using (SqlConnection connection = new SqlConnection(connectionString))
{
await connection.OpenAsync();
// run actual operation on connection (in an async way)
}
此代码块采用100 个并发调用平均 13 秒
。我尝试将线程池数量增加到 200,以减少 tasks
等待线程的机会。即使在让默认线程池计数后,观察结果也不会改变。
有趣的是,如果我将 await connection.OpenAsync()
更改为 connection.Open()
,性能会提高 10 倍。平均 100 个并发调用 1.01 秒
。
我尝试使用连接池设置
,看起来即使我将它减少到任意低的数字(测试时使用的是 2),数字也没有太大变化。
驱动代码为:
Task.WhenAll(Enumerable.Range(0, maxConcurrentCalls).Select((idx) => CallQuery(idx))).Result;
我等待的原因(通过执行 .Result
是因为驱动程序代码是一个控制台应用程序,它必须具有同步 main
)。在实际的生产代码中,包括 Controller 在内的所有内容都是async
。
最佳答案
我使用 OpenAsync 的一种方式是打开与多个数据库的连接。
Task t = conn1.OpenAsync();
conn2.Open();
t.Wait();
如果与远程服务器的连接速度较慢,打开可能需要几秒钟。这样两个公开赛并行进行。
关于c# - Open 和 OpenAsync 之间的区别 (SqlConnection),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41605572/
我有以下代码。对 connection.OpenAsync() 的调用无一异常(exception)地退出了程序。即使是调用者方法上的 finally 也不会被调用。程序的目标是.NET45 知道吗?
我正在尝试使用 MySqlConnector 连接到在 MariaDB 上运行的数据库.但是,如果我从指定网站执行基本代码片段,我的程序会在异步打开数据库连接时立即终止(通过调试发现)。通常,控制台窗
尝试使用 AngleSharp 解析 HTML 并遇到问题 https://opensource.org/licenses/MS-PL 以下代码在 Linqpad 中运行时返回“0” var url
我用下面的代码下载/保存了一张图片,稍后打开,但是在后面的OpenAsync中,抛出了UnauthorizedAccessException,看起来是文件没有关闭,实际上IRandomAccessSt
(标题看起来与 SqlConnection.Open vs SqlConnection.OpenAsync - what's different between the two beyond the
最近,我在与托管在 CentOS 8 上的 PostgreSQL 13 数据库通信时偶然发现了某些问题。我无法使用 NpgsqlConnection 类中的方法 OpenAsync() 打开连接。同步
当我运行这个时: using(SqlConnection connection = new SqlConnection(connectionString)){ await connection
我有一段代码可以在 URI 有效时从 http URI 正确加载图像,但我不知道如何捕获 OpenAsync 在 URI 无效时抛出的异常(结果为 404)。 问题是当包含调用 OpenAsync 的
我正在阅读 documentation for DbConnection.OpenAsync(CancellationToken)并找到以下代码段: The default implementatio
我正在将我们的 DAL 更改为 async DAL。 看着: await _conn.OpenAsync().ConfigureAwait(false); 我看到有一个用于打开连接的异步方法。但是为什
运行我们的 Azure 辅助角色(事件处理器主机)一段时间后,我们收到了这个奇怪的错误。最初我认为这是由于我们通过 ServiceClient (Microsoft.Azure.Devices) 将太
我正在尝试将 CancellationToken 与 SqlConnection.OpenAsync() 结合使用来限制 OpenAsync 函数所花费的时间。 我创建了一个新的 Cancellati
这是一个艰难的过程。使用完全相同的查询字符串,完全相同的以下代码: using (var db = new SqlConnection(queryString)) { await db.Open
我有一个带有一个按钮的简单 WPF 客户端应用程序 (.NET 4.6.2)。SqlConnection.OpenAsync 方法在完成以下步骤时阻塞 UI 线程: SQL Server 已启动并可从
我将 MonoTouch 4.0.7 与 MonoDevelop 2.8 Beta 2 和 XCode 4 一起使用(顺便说一句,有人知道如何获得 MonoTouch 4.2 版本吗?)。我们试图通过
我爱上了 async 和 await,但是我不知道如何在不使用 Task.Run 的情况下等待文件打开。似乎有一个 API in WRT . .NET 4.5 等效项在哪里?我问是因为如果我正在访问远
在使用 dapper 的 QueryAsync 方法时,使用 connection.OpenAsync() 和 connection.Open() 有什么区别。 异步: public async Ta
我是一名优秀的程序员,十分优秀!