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.