Se a imagem não for tão grande, e se houver uma boa chance de você reutilizá-la com frequência, e se você não tiver muitas delas e se as imagens não forem secretas (o que significa que não é grande negócio se um usuário pudesse ver a imagem de outra pessoa) ...
Muitos "se" estão aqui, então há uma boa chance de que seja uma má ideia:
Você pode armazenar os bytes da imagem Cache
por um curto período de tempo e fazer uma tag de imagem apontada para um método de ação, que por sua vez lê do cache e expele sua imagem. Isso permitirá que o navegador armazene a imagem em cache de maneira adequada.
// In your original controller action
HttpContext.Cache.Add("image-" + model.Id, model.ImageBytes, null,
Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(1),
CacheItemPriority.Normal, null);
// In your view:
<img src="@Url.Action("GetImage", "MyControllerName", new{fooId = Model.Id})">
// In your controller:
[OutputCache(VaryByParam = "fooId", Duration = 60)]
public ActionResult GetImage(int fooId) {
// Make sure you check for null as appropriate, re-pull from DB, etc.
return File((byte[])HttpContext.Cache["image-" + fooId], "image/gif");
}
Isso tem o benefício adicional (ou é uma muleta?) De funcionar em navegadores mais antigos, onde as imagens embutidas não funcionam no IE7 (ou IE8 se maior que 32kB).