Сначала создайте отдельный файл .aspx для изображения (на самом деле я бы предпочел перегрузку IHttpHandler для этого, но принцип тот же, и давайте вводить только одну новую концепцию за раз).
Файл .aspx будет просто наследоваться от выделенного кода и не иметь содержимого. Так что он будет иметь директиву <%@ Page %>
и больше ничего.
В выделенном фрагменте кода в обработчике события загрузки страницы получите изображение и установите тип содержимого ответа на соответствующее значение (или, например, если все изображения имеют тип image / png, вы можете жесткий код это). Затем запишите изображение на выход.
TestDBDataContext context1 = new TestDBDataContext();
int id;
if(int.TryParse(Request.QueryString["id"], out id))
{
var r = (from a in context1.ImageTables where a.Id == 8 select a).FirstOrDefault();
if(r != null)
{
Response.ContentType = r.ContentType;
Response.BinaryWrite(r.FileImage.ToArray());
return;
}
}
//code to handle 404 not found for no such image here (send error message or Server.Transfer to error page, etc.
Тогда вы можете использовать это с <img src="profileImg.aspx?id=8" alt="" />
и т. Д.
Повышение производительности заключается в получении байтов по 4 Кбайт за раз из базы данных и записи их в Response.OutputStream
вместо одного массивного массива в памяти. Для небольших файлов разница не важна, но для очень больших файлов она может быть значительной (как, например, «ура, мой веб-сервер больше не перепадает!»).