关于asp.net mvc:如何一次处理多个数据连接

How to handle multiple data connections at once

我有一个ASP.NET MVC应用程序,它从多个数据库收集数据。

这些数据库保存着各种站点的信息,对于每个新站点,我们都有一个新的数据库。每个站点的数据库在两个点连接,从站点连接,然后从总部连接。

网站应用程序每分钟更新网站上的数据,并且每分钟向总部(通过另一个网络应用程序)提供数据。有时,应用程序响应非常慢,根据我所调查的,这可能是因为连接池开始快速填充。

我想问这样的应用程序的最佳方法是什么,在那里我可以从中获得最佳性能。欢迎任何指导。


如何提高与数据库相关的Web应用程序性能,真正取决于您的体系结构。但你应该始终遵循一些一般规则:

  • 检查线程不足:在Web服务器上,.NET框架维护用于服务ASP.NET的线程池请求。当请求到达时,池中的线程发送以处理该请求。如果请求被处理同步地,处理请求的线程被阻塞在处理请求时,该线程无法服务另一个请求。

    这可能不是问题,因为线程池可以足够大以容纳许多阻塞的线程。但是,线程池中的线程数是有限的。在处理多个同时长时间运行的大型应用程序请求,可能会阻止所有可用线程。这种情况是被称为缺线。当达到此条件时,Web服务器将请求排队。如果请求队列已满,则Web服务器拒绝HTTP 503状态的请求(服务器太忙)。

    对于"线程不足",最好的方法是使用"异步"方法"。有关详细信息,请参阅此处。

  • 尝试对您的DataContext使用using块,以便在使用完后立即处理它们。

  • 事务中的大量数据:您应该检查您的代码。可能是你使用了太多的数据而不需要所有的数据。为了示例:传输可能只需要一个对象的所有对象对象的属性。在这种情况下,使用"投影"(参见此处一个例子。

    此外,您还可以根据自己的需要使用"懒惰加载"或"热切加载"。情节。但请注意,这些都不是每个场景。在某些情况下,"延迟加载"可以提高性能和对其他人来说,"急着装货"会使事情变得更快。这取决于你的深入了解这两个术语,以及您的问题案例,你的代码和设计。

  • 在服务器端或客户端过滤数据。在服务器端过滤数据有助于尽可能减少服务器负载和网络流量。它还可以提高应用程序的响应速度和性能。使用IQueryable接口进行服务器端筛选(有关详细信息,请查看此处)。使用服务器端筛选的一个副作用是具有更好的安全性
  • 检查您的体系结构,看看您是否有任何瓶颈。一控制器被调用过多,一种处理大量在具有大量数据的对象中,数据库中接收不断的要求,都是瓶颈的候选人。

  • 适用于大多数要求的数据时,使用兑现数据。但又一次根据你的情况明智地使用现金。错误的兑现使你的服务器速度很慢。

  • 如果您认为您的速度问题完全在数据库中,那么最好的方法是使用SQL分析工具来找出您遇到的关键情况。也许重新设计你自己的表格是一个答案。尽量把读写表分开。分离可以通过创建适当的视图来完成。还要检查这个清单来监视您的数据库。