gpt4 book ai didi

c# - 过程执行完成后网页挂起

转载 作者:太空宇宙 更新时间:2023-11-03 11:28:13 24 4
gpt4 key购买 nike

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

请给我一些关于如何避免这种页面挂起情况的指导。任何帮助都会很棒。提前致谢

最佳答案

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

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

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

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

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

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

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

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

更新

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

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

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

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

关于c# - 过程执行完成后网页挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8686275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com