0

我目前正在尝试创建一个具有主页的应用程序。在这个主页上有一个按钮,它将运行 CPU 密集型代码,然后显示结果。正如我在标题中所述,该应用程序使用的是 ASP.NET 和 C#,而不是我看过的其他一些网站似乎建议的 Windows 窗体。

我对 C# 比较陌生,并且没有在任何其他编程语言中尝试过。我也没有要显示的代码,因为我真的不知道如何进行。

4

2 回答 2

0

我认为“CPU密集型”是指该过程需要很长时间才能完成?在 Web 应用程序中,任何需要花费大量时间的事情都应该异步完成。在 HTTP 的请求/响应模型中,最好(出于多种原因)快速响应客户端发出的请求。

对于长时间运行的进程,我所说的“异步”并不是指使用 AJAX,因为这仍然是一个请求/响应,就像任何其他的一样。

在这种情况下,我所说的“异步”是指您希望有一个单独的服务器端进程来处理 CPU 密集型任务,而 Web 应用程序只是将任务排队等待运行并检查任务的状态人们寻找它。然后它可以在完成后报告任务的结果。

因此,架构的基本概述将是这样的:

  1. Web 应用程序中的用户单击按钮以“启动任务”。
  2. Web 应用程序将一条记录插入到数据库表中,指示任务已排队(可能带有排队者的用户 ID、时间戳,以及您需要知道的任何其他信息)。
  3. 一个单独的计划应用程序(很可能是控制台应用程序或 Windows 服务)一直在运行。(无论是在始终运行的 Windows 服务中使用计时器,还是作为控制台应用程序计划反复运行,例如每隔几分钟运行一次。)此应用程序检查数据库表中是否有新的排队任务。
  4. 当应用程序看到一个任务时,它会在数据库中将其标记为“已启动”(因此应用程序的后续运行不会尝试并行运行相同的任务)并开始运行它。
  5. Web 应用程序可以在数据库表中看到任务的状态并将其显示给请求它的用户,因此用户可以看到它仍在运行。
  6. 任务完成后,更新数据库表中的任务记录,并将结果存储在某处。(取决于结果是什么。数据?在数据库中。某种报告文件?另存为文件。这完全取决于你。)
  7. Web 应用程序可以看到任务的完成状态和记录的任何其他信息,用户可以请求查看任务的输出。

这里要记住的主要是将职责分解为两个应用程序。Web 应用程序的目的是提供用户界面。Web 应用程序不适合长时间运行的后台任务。因此,该责任被转移到更适合该目的的单独应用程序中。这两个应用程序通过共享数据库进行协调。

于 2013-03-19T15:15:20.370 回答
0

它可以在服务器上运行 CPU 密集型代码,是的。请注意,这通常会阻止您的 Web 应用程序在合理的时间内发送响应,并且 Web 应用程序可能看起来被冻结了。

您想到了哪种类型的 CPU 密集型代码?有很多方法可以处理这种情况。

于 2013-03-19T14:52:00.073 回答