首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >过程执行完成后网页挂起

过程执行完成后网页挂起
EN

Stack Overflow用户
提问于 2011-12-31 12:30:26
回答 1查看 136关注 0票数 2

我有一个网页,它接受一个excel文件,从中读取数据,并将其存储在一个缓冲表中。然后调用一个从该缓冲表中读取的过程,并且每个记录都通过多次验证。在过程完成后,我从后台代码中删除了缓冲表内容。我已经使用大约100条记录执行了这段代码,它在几秒钟内就执行完了。但是,当记录大小增加(比如2000)时,该过程需要5分钟以上的时间才能执行,但网页挂起。我已经查过表了,插入记录和删除缓冲表大约需要6-7分钟,但网页即使过了30分钟也没有返回结果。我已经尝试优化程序,但仍然在大量记录的情况下,网页挂起。

请给我一些方向,如何避免这种页面挂起的情况。任何帮助都是最好的。提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-31 12:59:23

我认为您应该做的第一件事就是将插入内容包装到一个事务中。

如果单个事务有太多记录,您可以每n个记录(比如500个)执行一次提交。

就网页返回而言,您可能会遇到某种超时,此时IIS或客户端将放弃请求,或者如果您使用数据更新页面,则可能存在导致页面错误的无效数据。

为此,您应该检查windows事件日志,以查看IIS或ASP.Net是否报告了任何异常。您还可以运行fiddler来查看请求发生了什么。

最后,我强烈建议重新设计,不需要用户在屏幕上等待提交的表单,直到处理完成。

我们用于此类型功能的标准模式是使用GUID在数据库中记录传入的请求,启动后台工作程序来执行任务,并将GUID返回给客户端。

当后台工作进程完成(或遇到错误)时,它会用新状态(即成功或失败)和错误消息(如果有)更新数据库中的请求表。

客户端可以使用GUID定期向web服务器发出ajax请求(使用window.timeout,以便不会阻塞用户并允许显示动画),以确定该过程是否完成。该过程完成后,可以根据需要更新UI。

更新

要使用GUID在数据库中记录传入的请求,请创建一个表,其中包含作为主键的GUID列、状态列(3个值:进行中、成功、失败)和错误消息列。

收到请求后,在您的代码中创建一个新的GUID,然后在启动后台工作程序之前,使用此GUID和状态in progress将一条记录写入这个新表。

您将把GUID传递给后台工作程序,以便它可以在完成时更新表(它只是将该状态更新为完成或错误,并记录错误消息(如果有)。

您还将通过javascript将GUID传递回客户端,以便客户端可以定期请求web服务器使用GUID对表执行查询,以确定请求何时不再进行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8686275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档