You described dynamically generating images in your Page_Load event which suggests that your images are being served by an ASP.NET page. If you are not serving pages, then there is no need to incur the performance overhead of instantiating the page object and it's associated objects, lifecycle events etc.
A better 'or more proper' way of generating your images would be to serve them from within a lighter HttpHandler (but you can still use Bitmap just fine). To implement the IHttpHandler interface you only have to implement 2 methods and there's not much to it. Something like this:
<%@ WebHandler Language="C#" Class="ImageHandler" %>
using System;
using System.IO;
using System.Web;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
public class ImageHandler : IHttpHandler
{
public void ProcessRequest (HttpContext context)
{
Bitmap output = new Bitmap(path);
// Do lots of fun stuff here related to image
// manipulation and/or generation
...
context.Response.ContentType = ResponseType("Image/png");
// Send image to the browser
image.Save(context.Response.OutputStream, ImageType(path));
// Be careful to clean up; you could put this inside a 'using' block
image.Dispose();
}
public bool IsReusable
{
get { return true; }
}
}
Please note: This is not working code... just a little example to give you an idea.
Put your code in an HttpHandler and you'll be 50% closer to awesome. At any rate, it will certainly serve your images faster and allow you to handle more requests... plus you get to learn more of the framework ;-)