EF5とMVC3を使用してデータベースから小さな画像をストリーミングする際に問題が発生しました
1枚の画像をストリーミングする場合はうまく機能しますが、ページに5枚の画像が含まれている場合は、接着剤のようになり、それぞれのサイズが5〜200 kbしかない場合でも、読み込みに最大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を削除し、return Fileを追加しました......速度は上がりますが、それでも許容できる速度ではありません.....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);
}