我正在开发ASP.NET上的Web服务。其中一个关键功能是将一些照片(最多18张)上传到服务器,之后这些照片正在处理中。我有图像大小调整的性能瓶颈。当我将最大数量的照片上传到服务器时,CPU使用率接近100%,因此服务器上的所有页面都没有响应,直到图像处理未完成。我使用MS Azure(应用程序计划 - S2)来托管我的服务。
那么,如何组织图像大小调整以防止完全CPU负载?
答案 0 :(得分:1)
您可以使用JS在客户端调整图像大小。这是一个很好的例子:Resizing an image in an HTML5 canvas
答案 1 :(得分:0)
我绝对建议您在单独的应用池上托管上传处理程序。您可以为Azure S2主机方案创建一个临时插槽,并处理上传。您当然需要将上传处理程序设置为新主机。这样,您的上传过程就不会消耗您的网络应用资源。
高流量(上传)会导致有关您的上传大小和服务器上的可用内存的Out of Memory
例外情况。请记住,当您在应用程序中引用压缩的图像文件时,压缩的图像文件会分配比文件本身更多的内存(有时超过 10x )。如果您预见到您将面临大量流量,则应将文件从客户端浏览器直接上传到Azure Blob存储(或Amazon S3等)的Blob存储。这样您就不必担心正在进行的上传的已分配内存。上传完成后,您需要调用另一个端点,根据需要处理图像。
亚马逊样本: link
您还可以使用经过充分验证的工具进行服务器端图像处理。这些可以比.NET的内置GDI +快40倍。检查ImageResizer。