Asp.net mvc 针对多个产品图像性能问题的ImageResizer.net?

Asp.net mvc 针对多个产品图像性能问题的ImageResizer.net?,asp.net-mvc,imageresizer,Asp.net Mvc,Imageresizer,我正在用产品页面构建一个Asp.NETMVC4应用程序。我来图书馆是为了处理和服务这些图像。我的页面有尺寸为160x160px的jpg缩略图,每个缩略图的大小为3~5KB。 据我所知,使用ImageResizer库,我只需上传原始的大型产品图像600x600px&10~20KB,并在访问者请求页面时将其动态调整为缩略图大小。比如: <img src="@Url.Content("~/images/imagename?width=160&height=160")" alt="">

我正在用产品页面构建一个Asp.NETMVC4应用程序。我来图书馆是为了处理和服务这些图像。我的页面有尺寸为160x160px的jpg缩略图,每个缩略图的大小为3~5KB。 据我所知,使用ImageResizer库,我只需上传原始的大型产品图像600x600px&10~20KB,并在访问者请求页面时将其动态调整为缩略图大小。比如:

<img src="@Url.Content("~/images/imagename?width=160&height=160")" alt="">

据我所知,这对于一些图片来说是不错的,但我的产品页面由20到100个产品jpg独特的缩略图组成(取决于页面大小)。 每次动态处理20-100张图片会影响性能吗?有人遇到过类似的情况吗?在上传过程中,我总是可以返回并生成两个不同的图像(缩略图和大图),但如果我能在每个产品中只生成一个图像并动态调整大小,我会非常好奇。
当我说性能时,我的意思是任何超过0.5-1秒的额外响应时间对我来说都是不允许的。

在文档中提到,有一个缓存插件,它可以将性能提高100-10000X:

每个面向公众的网站都需要为其动态调整大小的图像提供磁盘缓存(不,ASP.NET的输出缓存不起作用)。该模块速度极快,但解码原始图像需要大量连续RAM(通常为50-100MB)才能使用。由于它需要连续的、非分页的、非碎片化的RAM,所以它不能被用作(D)DoS攻击向量,但它确实意味着有一个基于RAM的限制,可以处理多个并发的图像处理请求。DiskCache插件通过将缓存文件的服务委托回IIS并利用哈希树磁盘结构,提高了吞吐量100-10000x。它可以轻松扩展到100000种变体,并可用于多达一百万张图像。这是性能版的一部分,售价249美元。DiskCache插件要求您使用URL API(读取原因)



对于网站,可以缓存的每一个操作都应该被删除。这允许服务器处理更多的访问者,而不是更多的处理

您可以使用ImageResizer的缓存插件,也可以使用特定的文件名手动写入文件,例如:product_154_180x180.jpg,其中154是产品id,180是宽度和高度,然后在需要显示时检查该文件是否存在

如果执行后一种操作,则可以使用服务器来管理此操作,方法是链接到页面源中的预期文件名,如果该文件名不存在,则服务器将调用一个脚本来调整大小,并使用imageresizer将调整大小的图像写入磁盘


最后一种方法还可以避免调用ImageResizer,从而节省一些处理能力。

因此我猜您的意思是,如果没有缓存插件,这将影响性能。恐怕由于成本问题,我不得不存储两个单独的图像。我认为您还没有考虑到您提出的DIY缓存解决方案中固有的并发问题。如果您尝试这样做,将会有大量死锁的线程和带有孤立句柄的文件。