我在使用 EF5 和 MVC3 从数据库流式传输小图像时遇到问题
当我流出 1 张图片时效果很好,但是当一个页面包含 5 张这样的图片时,它就像胶水一样,即使每张只有 5-200kb 大,它们也需要 5 秒才能加载。
我阅读了一些帖子并将其添加到 web.config
<system.net>
<connectionManagement>
<add address="*" maxconnection="100" />
</connectionManagement>
</system.net>
它对我的问题没有任何影响。
并将其用于流式传输:
public class ImageResult : ActionResult
{
public ImageResult(Stream imageStream, string contentType)
{
if (imageStream == null)
throw new ArgumentNullException("imageStream");
if (contentType == null)
throw new ArgumentNullException("contentType");
this.ImageStream = imageStream;
this.ContentType = contentType;
}
public Stream ImageStream { get; private set; }
public string ContentType { get; private set; }
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
throw new ArgumentNullException("context");
HttpResponseBase response = context.HttpContext.Response;
response.ContentType = this.ContentType;
byte[] buffer = new byte[4096];
while (true)
{
int read = this.ImageStream.Read(buffer, 0, buffer.Length);
if (read == 0)
break;
response.OutputStream.Write(buffer, 0, read);
}
response.End();
}
}
更新
我删除了 ImageResult 并添加了返回文件......加快了速度,但速度仍然不可接受...... 18kb 文件需要 2 秒。
控制器:
[SessionState(SessionStateBehavior.Disabled)]
public class ContentController : Controller
{
.....
public ActionResult Thumbnail(int fileID, int width)
{
var thumbnail = _fileRep.GetThumbnail(fileID, width);
return File(thumbnail.FileContent, thumbnail.ContentType);
}