Effizienz der Bildgrößenänderung in C # und .NET 3.5
Ich habe einen Webservice geschrieben, um die Größe der vom Benutzer hochgeladenen Bilder zu ändern. Unter funktionalen Gesichtspunkten funktioniert alles einwandfrei, aber die CPU-Auslastung nimmt bei jeder Verwendung zu. Es läuft auf Windows Server 2008 64-Bit. Ich habe versucht, auf 32 und 64 Bit zu kompilieren und bekomme ungefähr die gleichen Ergebnisse.
Das Herzstück des Dienstes ist diese Funktion:
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;
}
Ich habe einen Profiler für den Dienst eingerichtet und es scheint, dass der Großteil der Zeit in der GDI + -Bibliothek selbst verbracht wird und in meinem Code nicht viel zu tun ist.
Fragen: Mache ich hier in meinem Code etwas auffällig Ineffizientes? Es scheint dem Beispiel zu entsprechen, das ich gesehen habe.
Gibt es Vorteile bei der Verwendung anderer Bibliotheken als GDI +? Die Benchmarks, die ich gesehen habe, scheinen darauf hinzudeuten, dass sich GDI + gut mit anderen Bibliotheken vergleichen lässt, aber ich habe nicht genug davon gefunden, um zuversichtlich zu sein.
Gibt es Vorteile durch die Verwendung von "unsicheren Code" -Blöcken?
Bitte lassen Sie mich wissen, wenn ich nicht genug Code aufgenommen habe ... Ich bin froh, so viel wie gewünscht zu veröffentlichen, möchte aber nicht unangenehm in der Post sein.