I am trying to convert a `BLOB` that is stored in a database to a `JPG` and then I need to display it on an `html form` in a `C#` application. A little backstory first - this is an older web app that was designed to take a `JPG` (photo) that was stored as a path in the database, resize it, then show as a `BLOB`. This functionality needs to stay in place, but now one of the systems is changing and the photo is going to be stored in the database as a `BLOB` instead of a path to a photo (\\servername\images\xyz.jpg). One system still needs the image to be resized then sent back as a `BLOB` to display. The other systems that call this web-app will need the `BLOB` converted to a `JPG` to display. The code below works, but I think it might have put an unnecessary load on the server, because this morning the system was laggy and some features were impossible to use. I have a feeling that the `.Save` is the troublemaker here since I am calling it twice. I know the image doesn't need to be saved anywhere physically, as long as the web-app can call and have it display to the site. Is there anything I can change here to skip saving an image on the server and just display it so it doesn't use up a ton of resources? protected void Page_Load(object sender, EventArgs e) { byte[] byteImage = null; string ID = Request.QueryString["id"]; string imageFile = "\\\\server\\c$\\inetpub\\wwwroot\\web-app\\images\\" + ID+ ".jpg"; string server = Request.ServerVariables["server_name"]; var serverNameList = db.Servers.Select(x => x.ServerName).ToList(); connection.Open(); SqlCommand sqlCommand = new SqlCommand("sp", connection); sqlCommand.Parameters.Add("@ID", SqlDbType.VarChar); sqlCommand.Parameters["@ID"].Value = ID; sqlCommand.CommandType = CommandType.StoredProcedure; SqlDataReader dr = sqlCommand.ExecuteReader(); while (dr.Read()) { byteImage = (byte[])dr["BLOB"]; } if (byteImage != null) { using (MemoryStream ms = new MemoryStream(byteImage)) { //saving to jpg image Image img = new Bitmap(ms); img.Save(imageFile, ImageFormat.Jpeg); Response.Clear(); Response.CacheControl = "public"; Response.Cache.SetExpires(DateTime.Now.AddDays(1.0)); Response.ContentType = "Image/jpeg"; if (serverNameList.Contains(server)) // if user is coming from a specific server, resize the image then send back { byte[] resizedImage = GetResizedImage(imageFile, 300, 400); Response.OutputStream.Write(resizedImage, 0, resizedImage.Length); } else // skip resize and show image as jpg { Response.BinaryWrite(byteImage); } } } else // image is null { imageFile = HttpRuntime.AppDomainAppPath + "PERSON.GIF"; } } private byte[] GetResizedImage(string path, int width, int height) { Bitmap bitmap1 = new Bitmap(path); double height1 = bitmap1.Height; double width1 = bitmap1.Width; double num = 1.0; if (width > 0) num = width / width1; else if (height > 0) num = height / height1; MemoryStream memoryStream = new MemoryStream(); Bitmap bitmap2 = new Bitmap((int)(width1 * num), (int)(height1 * num)); bitmap2.SetResolution(150f, 150f); Graphics graphics = Graphics.FromImage(bitmap2); graphics.CompositingQuality = CompositingQuality.HighQuality; graphics.Clear(Color.White); graphics.DrawImage(bitmap1, new Rectangle(0, 0, (int)(num * width1), (int)(num * height1)), new Rectangle(0, 0, (int)width1, (int)height1), GraphicsUnit.Pixel); bitmap2.Save(memoryStream, ImageFormat.Jpeg); return memoryStream.ToArray(); }