Wydajność zmiany rozmiaru obrazu w C # i .NET 3.5

Napisałem usługę internetową, aby zmienić rozmiar przesyłanych przez użytkownika obrazów, a wszystko działa poprawnie z funkcjonalnego punktu widzenia, ale powoduje, że użycie procesora zwiększa się za każdym razem, gdy jest używane. Działa na 64-bitowym systemie Windows Server 2008. Próbowałem skompilować do 32 i 64 bitów i uzyskać te same wyniki.

Sercem usługi jest ta funkcja:

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

Umieściłem profiler w usłudze i wydawało się, że większość czasu spędza w samej bibliotece GDI +, a mój kod nie pozwala na wiele.

Pytania: Czy w moim kodzie robię coś rażąco nieefektywnego? Wydaje się, że jest zgodny z przykładem, który widziałem.

Czy można uzyskać korzyści z używania bibliotek innych niż GDI +? Testy, które widziałem, wydają się wskazywać, że GDI + dobrze porównuje się z innymi bibliotekami, ale nie znalazłem ich wystarczająco dużo, aby być pewnym.

Czy można uzyskać korzyści dzięki blokom „niebezpiecznego kodu”?

Daj mi znać, jeśli nie uwzględniłem wystarczającej ilości kodu ... Cieszę się, że mogę podać tyle, ile zażądałem, ale nie chcę być nieznośny w poście.

questionAnswers(6)

yourAnswerToTheQuestion