Eficiência de redimensionamento de imagem em C # e .NET 3.5

Escrevi um serviço da Web para redimensionar imagens carregadas pelo usuário e todas funcionam corretamente de um ponto de vista funcional, mas isso faz com que o uso da CPU aumente toda vez que é usado. Ele está sendo executado no Windows Server 2008 de 64 bits. Eu tentei compilar para 32 e 64 bits e obter os mesmos resultados.

O coração do serviço é esta função:

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;
}  

Eu coloquei um profiler no serviço e pareceu indicar que a grande maioria do tempo é gasto na própria biblioteca GDI + e não há muito a ser ganho no meu código.

Perguntas: Estou fazendo algo extremamente ineficiente no meu código aqui? Parece estar em conformidade com o exemplo que tenho visto.

Há vantagens em usar bibliotecas diferentes do GDI +? Os benchmarks que eu vi parecem indicar que o GDI + se compara bem com outras bibliotecas, mas eu não encontrei o suficiente para estar confiante.

Há ganhos a serem obtidos usando blocos "código não seguro"?

Por favor, deixe-me saber se eu não incluí o suficiente do código ... Eu estou feliz em colocar o quanto solicitado, mas não quero ser desagradável no post.

questionAnswers(6)

yourAnswerToTheQuestion