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中禁用会话状态?
希望这可以帮助!
您通过 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 那样快。
如果上面的内容为您解决了这个问题,您可能会想修改缓存参数。