ASP.NET MVC通过MVC框架加载慢图像?

Mic*_*elD 5 c# model-view-controller performance load file

在一些写真集页面上,我想显示appr 20缩略图.这些缩略图以编程方式从数据库加载.那些缩略图已经调整大小.当我向他们展示图像加载有点慢.有些需要0.5秒才能加载一些等待2个secons.数据库并不重要,因为当我删除数据库层时,性能问题仍然存在.当我直接用html加载相同的图像时,图像会立即加载.

通过mvc框架加​​载图像/文件是慢还是我错过了什么?

这太慢了

//in html
<img src='/File/Image.jpg' border='0'>                    

//in controller
public FileResult File(string ID)
{           
    //database connection removed, just show a pic
    byte[] imageFile = System.IO.File.ReadAllBytes(ID);
    return new FileContentResult(imageFile,"image/pjpeg");
}
Run Code Online (Sandbox Code Playgroud)

这很快就会发生

<img src='/Content/Images/Image.jpg' border='0'>                    
Run Code Online (Sandbox Code Playgroud)

小智 9

我遇到过同样的问题.我正在使用MVC 3.拔掉我的头发后,我发现,一旦你在你的网络应用程序中使用会话状态,动态图像加载似乎就会被堵塞,因为会议要求很高.为了解决这个问题,我用我的控制器装饰了:

[SessionState的(System.Web.SessionState.SessionStateBehavior.Disabled)]

这会禁用我的Photos控制器的会话状态,并返回速度.如果您使用的是早期版本的MVC,则需要跳过一些环节并创建一个控制器/控制器工厂来执行此操作.请参阅如何在ASP.NET MVC中禁用会话状态?

希望这可以帮助!


Ben*_*thy 1

您通过 MVC 公开图像来增加处理开销。当您直接链接到图像时,它是由 IIS 而不是 MVC 管道自动处理的,因此您可以跳过大量开销。

此外,通过加载到字节数组中,您可以将完整图像从磁盘加载到内存中,然后将其流式传输出去,而不是直接从磁盘流式传输。

您可能会获得稍微更好的性能:

[OutputCache(Duration=60, VaryByParam="*")]
public FileResult File(string ID)
{   
    string pathToFile;
    // Figure out file path based on ID
    return File(pathToFile, "image/jpeg");
}
Run Code Online (Sandbox Code Playgroud)

但它不会像静态文件完全跳过 MVC 那样快。

如果上面的内容为您解决了这个问题,您可能会想修改缓存参数。