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的异步编程:
- System.Data.SqlClient.SqlCommand.BeginExecuteNonQuery
- System.Data.SqlClient.SqlCommand.BeginExecuteReader
- 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