Si la imagen no es tan grande, y si hay una buena posibilidad de que la reutilice con frecuencia, y si no tiene demasiadas, y si las imágenes no son secretas (lo que significa que no es grande tratar si un usuario podría ver la imagen de otra persona) ...
Hay muchos "si" aquí, por lo que es muy probable que sea una mala idea:
Puede almacenar los bytes de la imagen Cache
durante un breve período de tiempo y hacer que una etiqueta de imagen apunte hacia un método de acción, que a su vez lee del caché y escupe su imagen. Esto permitirá que el navegador almacene la imagen en caché de manera adecuada.
// 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");
}
Esto tiene el beneficio adicional (¿o es una muleta?) De trabajar en navegadores más antiguos, donde las imágenes en línea no funcionan en IE7 (o IE8 si son mayores de 32kB).