Asp.net mvc 我应该将我的操作方法转换为异步操作方法吗?
我有一个网站,用户可以上传PDF并将其转换为WORD文档 它工作得很好,但有时(每小时5-6次)用户必须比平时等待更多的时间才能进行转换 我使用ASP.NET MVC,流程为: -用户上传文件->获取流并将其转换为word->将word文件另存为临时文件->返回用户url 我不确定是否必须将此流转换为?基本上,我的流程现在是顺序的,但我每秒有3-5个请求,CPU是双核和4GB Ram 据我所知,maxConcurrentRequestsPerCPU是5000;另外Asp.net mvc 我应该将我的操作方法转换为异步操作方法吗?,asp.net-mvc,asynchronous,iis-7.5,Asp.net Mvc,Asynchronous,Iis 7.5,我有一个网站,用户可以上传PDF并将其转换为WORD文档 它工作得很好,但有时(每小时5-6次)用户必须比平时等待更多的时间才能进行转换 我使用ASP.NET MVC,流程为: -用户上传文件->获取流并将其转换为word->将word文件另存为临时文件->返回用户url 我不确定是否必须将此流转换为?基本上,我的流程现在是顺序的,但我每秒有3-5个请求,CPU是双核和4GB Ram 据我所知,maxConcurrentRequestsPerCPU是5000;另外每个处理器线程的默认值限制为25
每个处理器线程的默认值限制为25
;所以这些默认设置应该很好,对吧
那为什么我的web应用程序有时仍然有“等待”?是否有任何IIS设置需要从默认设置修改为其他设置,或者我应该直接将转换的同步方法设置为异步
Ps:转换本身需要1秒到40-50秒,这取决于pdf文件的大小
更新:基本上,我不太清楚的是:如果用户上传了一个文件,并且转换时间很长,那么当前的请求不应该因此而“受损”吗?因为下一个请求是独立的,所以进行另一个CPU调用和不同的线程,所以这里不应该等待,不是吗?这里有一些事情必须明确定义。至少据我所知,异步(异步)方法和流不是一回事 异步方法(使用Task,通常还利用async/await关键字)将按以下方式工作:
在您的情况下,我推荐第二种方法,因为第一种方法根本没有帮助 当然,这并不容易。您需要模拟队列,需要有一个处理代理和一个逐出策略(如果不需要第二个代理,很可能由同一个代理强制执行) 这将按照以下思路进行: a。最终用户提交一个文件,web服务器接收它 Bweb服务器将其放入队列并接收作业编号 Cweb服务器向用户返回一个带有作业编号的响应(比如一个带有轮询机制的HTML页面,该机制将定期从服务器接收进度) D代理将在有机会(即完成其他工作)时开始处理文档,并在公共位置更新其状态,以便web服务器选择此信息 Eweb服务器将接收来自HTML响应的呼叫,询问作业的状态,并将发现作业已完成,并提供下载链接或直接开始下载 这可以通过某些方式加以改进:
Remus Rușanu拥有一个简单的RDBMS,可以实现队列。转换CPU受限吗?如果是,异步没有帮助。CPU用于转换,I/O用于将结果写入文件…但写入时间并不特别长?写入速度非常快,例如转换为36秒,写入0秒。