繁体   English   中英

做大量查询时,asp.net网站停止响应

[英]asp.net website stops responding when doing heavy query

我有一个即将发布的asp.net网站。 该网站负责业务管理。 我准备发布的一件事是从购买的企业列表中将一大堆数据上传到我们的SQL数据库中。 为此,我使用一种非常简单的方法:将.csv文件放在服务器上的文件夹中,并在临时页面上使用Page_Load事件来执行处理数据并将其放入我们的数据库所需的逻辑。

这是一个漫长的过程。 业务列表被分解为一堆文件,并且我在页面上设置了脚本,以便在每次刷新页面时从一个文件导入所有数据。 每个文件大约需要10分钟。

奇怪的是:在处理这些数据时(服务器正在处理所有内容,而page_load方法终止之前),该网站被阻止了-没有其他用户可以访问它,并且该网站上的其他页面也不会加载。 他们陷入了“正在连接...”阶段。

目前,这并不是一个大问题,因为该站点仅在测试环境中运行。 但是,当站点处于活动状态时,我可能需要使用类似的脚本将数据放入数据库中,并且显然,在发生这种情况时阻止所有用户访问是不可接受的。

我相当确定这不是SQL Server的问题,因为我可以在此过程运行时同时进行查询,因此Web服务器一定有问题。

我无法发布代码摘录,因为它是漫长而又技术性的。 但是,没有任何困难:该方法从.csv文件中读取数据,进行处理,然后针对文件的每一行向外部服务发出HTTP请求,以收集一些更相关的数据。 然后,将所有数据插入到SQL数据库中。

据我了解,Web服务器不应像这样阻塞。 即使一个线程/用户需要大量资源,他们也应该能够一次模拟地向许多用户提供页面。

有什么建议可能会发生什么吗? 我应该从哪里开始寻找解决方案?

让请求由异步处理程序处理。

http://msdn.microsoft.com/en-us/library/ms227433%28v=vs.85%29.aspx

这将使您的网站在长期运行的过程中继续开展业务。

ASP.NET不适用于繁重的处理。 ASP.NET页应仅触发操作。 后台进程应完成繁重的工作。 两者都可以使用队列或类似方式进行通信。 该网页应仅报告后台任务的状态。

这种范例在现代计算(尤其是云计算)中至关重要。

请从msdn参考http://msdn.microsoft.com/en-us/library/ff647787.aspx#scalenetchapt06_topic8

我认为问题是您在使用asp.net的默认设置,但没有足够的线程,只有2个出站tcp / ip连接。 这对于真正的网站来说简直太可怕了。

请在您的machine.config文件中更改maxconnections,maxworkerthreads等。 这些设置中有一些公式,例如12 * CPU数量等。

这应该为您提供所需的性能提升。

希望这可以帮助。

编辑:-

我的评论是在我了解了machine.config中的autoconfig = true设置之前。 我进行了一些初步研究,发现这些设置适用于大多数应用程序。 因此,这些自定义设置仅在可能需要仔细考虑的优化的特殊情况下才需要。

暂无
暂无

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

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