[英]How to increase IIS pool performance?
我有这样的方法:
[HttpPost]
public async Task<ActionResult> ConvertWav(int id)
{
using (var c = new DbEntities())
{
var converter = new FFMpegConverter();
//code which converting some files from the path which the take from the DB
//and put it in the local directory
}
}
这是一个简单的ASP.NET Web应用程序,可通过ID从数据库表中的ID转换文件。 该表还具有“ dest_path”和“ input_path”字段。 表仅包含本地文件的路径。 例如D:/example/file.mp3
但是,当它开始转换时,该转换器使用的CPU时间百分比很小。 少于所有功能的0.1%。 当我开始一些转换器操作(发送一些请求)时,它变得更少了。
我尝试使用Web Garden,但结果相同。 如何增加请求的CPU使用率? 完整代码: https : //codeshare.io/7XMec
没有看到其余的代码,您的问题很可能是您在SQL Server中使用了缓冲I / O API。 这意味着FFMpeg进程到第一个字节的时间就是EntityFramework进程到最后一个字节的时间。 解决方案?
您需要替换所有EF并通过SqlFileStream
类访问数据库。 然后,您需要将数据通过管道传输到FFMPeg进程中,而不是使用文件/字节数组。
看来您需要使用FFMpegConverter.ConvertLiveMedia
方法而不是FFMpegConverter.ConvertMedia
方法来实现此目的。 总的来说,您仍然会发现可能受I / O约束,而不是受CPU约束。
但是,将来,您应该为自己配置文件,以调试性能问题。
您对症状的解释是完全错误的。
通过使用这种异步操作并启动转换器,可以看到w3wp.exe几乎不消耗CPU资源,因为它只是等待该转换器任务完成。
同时,在ASP.NET中执行长时间运行的任务是一个糟糕的设计,因为该框架是为具有中等超时的简单快速任务而设计的。 诸如SignalR之类的框架可能是更好的选择。
Web Garden将为您提供帮助,但在高负载下却无济于事,就好像所有线程都在转换器上等待时一样,站点性能仍然很差,因为那时它无法轻易地旋转自由线程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.