Eficacia de cambio de tamaño de imagen en C # y .NET 3.5

He escrito un servicio web para cambiar el tamaño de las imágenes subidas por el usuario y todo funciona correctamente desde un punto de vista funcional, pero hace que el uso de la CPU aumente cada vez que se usa. Se está ejecutando en Windows Server 2008 64 bit. He intentado compilar a 32 y 64 bits y obtuve los mismos resultados.

El corazón del servicio es esta función:

private Image CreateReducedImage(Image imgOrig, Size NewSize)
{
    var newBM = new Bitmap(NewSize.Width, NewSize.Height);
    using (var newGrapics = Graphics.FromImage(newBM))
    {
        newGrapics.CompositingQuality = CompositingQuality.HighSpeed;
        newGrapics.SmoothingMode = SmoothingMode.HighSpeed;
        newGrapics.InterpolationMode = InterpolationMode.HighQualityBicubic;
        newGrapics.DrawImage(imgOrig, new Rectangle(0, 0, NewSize.Width, NewSize.Height));
    }

    return newBM;
}  

Puse un perfil en el servicio y parecía indicar que la mayor parte del tiempo se pasa en la biblioteca GDI + y no hay mucho que ganar en mi código.

Preguntas: ¿Estoy haciendo algo claramente ineficiente en mi código aquí? Parece ajustarse al ejemplo que he visto.

¿Hay ventajas en el uso de bibliotecas distintas de GDI +? Los puntos de referencia que he visto parecen indicar que GDI + se compara bien con otras bibliotecas, pero no encontré lo suficiente como para tener confianza.

¿Se pueden obtener ganancias utilizando bloques de "código inseguro"?

Por favor, avíseme si no he incluido suficiente del código ... Estoy feliz de poner todo lo que solicitó, pero no quiero ser detestable en la publicación.