C# 在ASP.NET中处理较长的页面执行时间

C# 在ASP.NET中处理较长的页面执行时间,c#,asp.net,performance,asp.net-3.5,C#,Asp.net,Performance,Asp.net 3.5,我正在开发一个web应用程序导入程序。目前,管理员用户可以上传一个格式化的csv文件,我的页面将对其进行解析。我遇到了一个执行持续时间问题,因为每一行都属于一个必须保存到Scribd、S3以及一些内部处理的文件 你们有什么建议来提高执行时间?由于这是一个只管理的页面,我怀疑它会运行超过一周一次,所以我希望它能尽快发布 我已经查看了一些Async=“true”标志,但我不确定这是否是我想要的方向,或者我是否应该更关注windows服务器。一个快速而肮脏的选项可能是在该页面上将Page.server

我正在开发一个web应用程序导入程序。目前,管理员用户可以上传一个格式化的csv文件,我的页面将对其进行解析。我遇到了一个执行持续时间问题,因为每一行都属于一个必须保存到Scribd、S3以及一些内部处理的文件

你们有什么建议来提高执行时间?由于这是一个只管理的页面,我怀疑它会运行超过一周一次,所以我希望它能尽快发布


我已经查看了一些Async=“true”标志,但我不确定这是否是我想要的方向,或者我是否应该更关注windows服务器。

一个快速而肮脏的选项可能是在该页面上将Page.server.ScriptTimeout设置为一个非常高的值。(我认为它在Int.MaxValue处最大)


单击submit按钮后,最好阻止它,并通知用户他们可能想去煮咖啡

一个快速而肮脏的选项可能是在该页面上将Page.Server.ScriptTimeout设置为非常高的值。(我认为它在Int.MaxValue处最大)


单击submit按钮后,最好阻止它,并通知用户他们可能想去煮咖啡

我想到了两个选项:

线程:在代码设置中,创建一组线程,将它们连接起来,然后让每个线程处理一个文件。所有线程完成后,您将能够返回页面。这将增加您的周转时间,但仍可能在返回页面上留下一些需要的内容


队列:让用户提交csv文件并提供GUID/哈希/任何ID,管理员可以在其中进入“状态”页面,输入其ID并检查其作业的详细信息。此解决方案将向用户提供快速反馈,并允许他们无需等待即可跟踪结果。

想到两个选项:

线程:在代码设置中,创建一组线程,将它们连接起来,然后让每个线程处理一个文件。所有线程完成后,您将能够返回页面。这将增加您的周转时间,但仍可能在返回页面上留下一些需要的内容


队列:让用户提交csv文件并提供GUID/哈希/任何ID,管理员可以在其中进入“状态”页面,输入其ID并检查其作业的详细信息。此解决方案将向用户提供快速反馈,并允许他们跟踪结果,而无需等待。

我建议使用AJAX进行内部回发,以处理异步处理。您可以定期轮询状态,并防止母版页上的“处理”轮因冗长的处理过程而不断在页面上旋转。

我建议使用AJAX进行内部回发,以处理异步处理。您可以定期轮询状态,并防止母版页在漫长的处理过程中“处理”轮不断在页面上旋转。

我有一个网页处理邮件列表需要很长时间,因此我在它自己的线程中启动它。完成此过程后,可以从结果页面上的另一个链接查看报告。我有一个可运行的MailSender类。ASPX脚本中有一点如下所示:

// prep the MailSender MailSender ms = new MailSender(people, Subject, FileName....); if (SendAsync) { ThreadStart ts = new ThreadStart(ms.run); Thread WorkerThread = new Thread(ts); WorkerThread.Start(); } else { ms.run(); } //准备邮件发送者 MailSender ms=新的邮件发件人(人员、主题、文件名……); 如果(发送异步){ ThreadStart ts=新的ThreadStart(ms.run); 线程工作线程=新线程(ts); WorkerThread.Start(); }否则{ run女士(); } 如果你想加速你的代码,如果可以的话,试着把它分成可并行的部分,并为每一部分编写一个类。然后,您可以为每一位启动一个新线程,并在某个位置监视状态,以便通知用户何时返回结果。您说过输入的每一行都会生成自己的输出文件。听起来是多线程的最佳选择。但是,如果服务器上没有多核可用,则不会加快速度


整个方案的一个问题是,服务器重新启动或应用程序池回收将终止长时间运行的进程。如果线程要运行一两个小时,这可能是一个问题

我有一个网页,处理邮件列表需要很长时间,所以我在它自己的线程中启动它。完成此过程后,可以从结果页面上的另一个链接查看报告。我有一个可运行的MailSender类。ASPX脚本中有一点如下所示:

// prep the MailSender MailSender ms = new MailSender(people, Subject, FileName....); if (SendAsync) { ThreadStart ts = new ThreadStart(ms.run); Thread WorkerThread = new Thread(ts); WorkerThread.Start(); } else { ms.run(); } //准备邮件发送者 MailSender ms=新的邮件发件人(人员、主题、文件名……); 如果(发送异步){ ThreadStart ts=新的ThreadStart(ms.run); 线程工作线程=新线程(ts); WorkerThread.Start(); }否则{ run女士(); } 如果你想加速你的代码,如果可以的话,试着把它分成可并行的部分,并为每一部分编写一个类。然后,您可以为每一位启动一个新线程,并在某个位置监视状态,以便通知用户何时返回结果。您说过输入的每一行都会生成自己的输出文件。听起来是多线程的最佳选择。但是,如果服务器上没有多核可用,则不会加快速度


整个方案的一个问题是,服务器重新启动或应用程序池回收将终止长时间运行的进程。如果线程要运行一两个小时,这可能是一个问题