SQL Server连接字符串Asynchronous Processing = true

Geo*_*ge2 13 .net c# asp.net ado.net sql-server-2005

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

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

小智 27

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

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

...

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

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

...


tug*_*erk 24

从.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

此功能保留在.NET Framework 4.5中的SqlClient中.

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

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


mar*_*c_s 8

只是让Asynchronous Processing=True你的连接字符串只是简单地让你编写异步查询 - 我不知道你的连接字符串中的设置如何影响你的性能,如果你不改变其他任何东西.

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

  • 据我所知,这个设置只允许**你使用异步ADO.NET查询 - 但它不会自动执行任何操作.是的 - 如果您没有指定此设置,您将****不能使用异步ADO.NET查询. (3认同)
  • 它**启用**异步 ADO.NET 查询 - 但除非您实际上**编写**此类异步查询,否则它没有任何效果。 (2认同)

Coh*_*hen 7

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

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

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


小智 5

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

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

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

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