SQL Server连接字符串Asynchronous Processing = true

我正在使用.Net 2.0 + SQL Server 2005 Enterprise + VSTS 2008 + C#+ ADO.Net来开发ASP.Net Web应用程序。

我的问题是,如果我使用Asynchronous Processing=true与SQL Server身份validation模式(不是Windows身份validation模式,即在web.config中使用连接字符串中的sa帐户和密码),我想知道Asynchronous Processing=true是否会影响性能我的Web应用程序(或取决于我的ADO.Net代码实现模式/场景)? 为什么?

只是在连接字符串中使用Asynchronous Processing=True只是简单地允许您编写异步查询 – 如果您不更改任何其他内容,我不会看到连接字符串中的该设置如何影响您的性能。

当您开始对数据库查询进行异步处理时,您将有希望开始看到对性能的积极影响。 但只是指定一个选项不应对您的应用产生任何(正面或负面)影响。

事实上,启用该选项时会出现性能问题; 请参阅ADO.NET 2.0异步命令执行(ASYNC)常见问题解答 :

问:什么是新的ADO.NET 2.0异步命令执行function。
答:ASYNC允许您以非阻塞方式执行命令。 我们在SqlCommand中公开了以下异步方法:BeginExecuteNonQuery,BeginExecuteReader和BeginExecuteXmlReader,带有轮询,同步和( 颤抖 )回调。

问:这是否意味着当我向连接字符串添加ASYNC = TRUE时,我执行的每个命令(同步或异步)都将以重叠模式发生?
答:是的,我们在此连接上执行的所有操作都将以重叠模式完成。 对于同步操作,我们在返回之前在内部等待完成,我们基本上伪造了此连接上的同步行为。 这就是我们需要连接字符串关键字的原因。

问:这是否会产生影响?
答: 当然,只有当您知道要使用异步function时才使用ASYNC = TRUE。

从.NET Framework 4.5开始,忽略异步处理属性,因此不必包含它。

引用:

在.NET Framework 4.5之前,使用以下方法和Asynchronous Processing = true连接属性完成了对SqlClient的异步编程:

  1. System.Data.SqlClient.SqlCommand.BeginExecuteNonQuery
  2. System.Data.SqlClient.SqlCommand.BeginExecuteReader
  3. System.Data.SqlClient.SqlCommand.BeginExecuteReader

此function保留在.NET Framework 4.5中的SqlClient中。

从.NET Framework 4.5开始,这些方法不再需要在连接字符串中使用Asynchronous Processing = true。

有关更多信息,请参阅以下链接:

  • SqlConnectionStringBuilder.AsynchronousProcessing属性
  • 异步编程

与接受的答案相反,它实际上对性能有影响

Atleast:根据msdn文档 。 但实际上,我无法看到SQL 2005 Express场景与.Net 3.5 SP1的任何区别。

由于MSDN文档警告这一点,我认为它应该是有趣的未来参考。

我刚刚测试了ASYNC = TRUE和ASYNC = FALSE的同步数据库调用的性能。 我担心的是:

答:当然,只有当您知道要使用异步function时才使用ASYNC = TRUE

我可以说性能完全一样 。 我在高负载下测试了Azure Web角色,并计算了大量请求的平均值。

因此,如果您的应用程序使用不同类型的数据库查询(同步和异步),您可以自由设置Asynchronous Processing=true并将此连接用于同步和异步查询。 我相信它还会使你的连接池变小。

这是一个要点,它包含一个帮助修改连接字符串的类,以确保它们设置Asynchronous Processing = True: https : //gist.github.com/2597691