繁体   English   中英

ASP.NET Web应用读取查询性能

[英]Asp.Net web app read query performance

使用EntityFramework 5(POCO),SQL2012,ASP.NET-MVC4。

我的问题是,我的应用程序运行缓慢,原因是我上面提到的技术堆栈对同一服务器上运行的不同查询使用相同的连接。

可以说我们有两个不同的查询,一个查询运行缓慢(最多一分钟),另一个查询运行非常快1,2秒。 即使在只有一个用户(也就是我)的测试服务器上,如果我打开两个不同的浏览器窗口(共享相同的会话),并且先执行长查询,然后又执行快速查询,然后再查询在sql服务器上,对于活动会话,我只能看到一个会话,结果,快速查询也陷入了等待慢速查询的困境。 我尝试了几件事并获得了随机结果:我禁用了连接字符串上的池;

Pooling=False;

有时它会在两个不同的会话中(有时是在一个会话中)运行这些查询。 我将最小池大小设置为10,我认为在达到最小池大小之前还可以,然后它开始使用相同的数据库会话。

另一件事是,默认情况下已启用MARS。 然后,我尝试删除它(我不知道该atm的全部影响,我还没有测试所有内容,所以实际上我打算将此功能保持启用状态。)然后我又得到了随机结果。

我使用了两个不同的浏览器,所以使用了两个不同的IIS会话,并获得了更好的结果。 它为每个查询打开了两个数据库会话。

我们使用MSDTC,因此所有事务都在事务上下文中运行,并且所有打开的连接都保留在“可序列化”设置中,结果,我们不得不在“事务作用域”中运行读取查询,并在其中选择“读取未提交”隔离级别。

因此,拥有一个功能强大的SQL Server,如何防止ASP.Net/ADO.Net/EF5使用仍在服务器上运行查询的连接。

PS:我通过将连接字符串传递到DbContexts的构造函数来实例化DbContext。 上面运行的查询是在两个不同的上下文中。

这似乎解决了问题。

[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
public class SomeController: Controller

如果将会话状态设置为只读,则Asp.Net MVC允许您同时运行多个查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM