是否可以使用按钮运行cpu密集型代码,然后使用c#和asp.net为web应用程序显示结果

是否可以使用按钮运行cpu密集型代码,然后使用c#和asp.net为web应用程序显示结果,c#,asp.net,cpu-usage,C#,Asp.net,Cpu Usage,我目前正在尝试创建一个有主页的应用程序。在这个主页上有一个按钮,它将运行CPU密集型代码,然后显示结果。正如我在标题中所说,该应用程序使用的是ASP.NET和C#而不是我看过的一些其他网站所建议的Windows窗体 我对C#比较陌生,没有在任何其他编程语言中尝试过。我也没有代码可显示,因为我真的不知道如何进行此操作。它可以在服务器上运行CPU密集型代码,是的。请注意,这通常会阻止web应用程序在合理的时间内发送响应,并且web应用程序可能会被冻结 您想要什么类型的CPU密集型代码?有很多方法可以

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


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

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

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

我想你说的“CPU密集型”是指该过程需要很长时间才能完成?在web应用程序中,任何花费超过几分钟的操作都应该异步完成。在HTTP的请求/响应模型中,最好(出于多种原因)快速响应发出请求的客户端

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

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

因此,架构的基本概述如下:

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

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

    您是否计划在服务器上运行此功能?是否要在服务器上进行处理?或者在浏览器中?开始只是在按钮的单击处理程序中执行CPU密集型代码。如果您对该解决方案有任何问题(很可能是与性能相关的,而不是功能性的),那么就从那里开始。最终用户将看到的唯一变化是您可能希望它是异步的。只需将该部分放到UpdatePanel中,这样他们就可以在页面发生时与页面的其余部分进行交互。感谢您的评论,我将在云中在线托管该应用程序。我希望在浏览器中进行处理。我正在考虑让它在循环中循环多次,并增加循环次数,以查看cpu使用量是否有任何变化。你认为这是个好主意还是我应该试试别的?嗨,大卫,谢谢你的回答。如果我是唯一一个使用web应用程序的人,我还需要两个应用程序吗?我的主要目标是有同样的计划;一个在本地托管,另一个在本地托管,并比较两者的性能是否有任何差异。@AlexT:嗯,我想如果浏览器没有超时,那么您可以在web应用程序中在线运行任务。如果没有用户关心你自己,而这只是一个纯粹的学术练习,那么你应该没事。好的,很高兴听到这个消息。然而,由于我以前从未这样做过,我不知道如何使我的程序更加cpu密集,或者如何在不使用messagebox的情况下显示结果。你能解释一下吗?@AlexT:啊,这听起来和这个问题的解释完全不同。您现在要问的是,您可以编写什么代码来在您的机器上运行基准测试。谷歌搜索“C#CPU基准测试”有几个很有希望的结果,包括一个您应该能够使用的代码项目。这是一个Windows窗体项目,但您应该能够将所需的代码提取到您自己的项目中。不过,在这一点上,你会想更具体地描述你要测量的内容。还有原因,因为可能有更好的方法。好的,在我的主页上我有一个按钮,当你按下按钮时,它会循环并报告完成所需的毫秒数。我想要的是测量我需要多少cpu