Tôi đã viết một dịch vụ web để thay đổi kích cỡ hình ảnh đã tải lên của người dùng và tất cả hoạt động chính xác từ một góc nhìn chức năng, nhưng nó làm cho mức sử dụng CPU tăng đột biến mỗi lần sử dụng. Nó đang chạy trên Windows Server 2008 64 bit. Tôi đã cố gắng biên dịch đến 32 và 64 bit và có được kết quả tương tự.Hiệu suất thay đổi kích thước hình ảnh trong C# và .NET 3.5
Trái tim của dịch vụ này là chức năng này:
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;
}
tôi đặt một hồ sơ về các dịch vụ và nó dường như cho thấy đại đa số thời gian là chi tiêu trong GDI + thư viện riêng của mình và không có nhiều để đạt được trong mã của tôi.
Câu hỏi: Tôi có đang làm điều gì đó không hiệu quả trong mã của mình ở đây không? Nó có vẻ phù hợp với ví dụ tôi đã thấy.
Có lợi ích nào khi sử dụng các thư viện ngoài GDI + không? Các tiêu chuẩn tôi đã thấy dường như chỉ ra rằng GDI + cũng so sánh với các thư viện khác nhưng tôi không tìm thấy đủ những điều này để tự tin.
Có lợi ích nào bằng cách sử dụng các khối "mã không an toàn" không?
Vui lòng cho tôi biết nếu tôi không bao gồm đủ mã ... Tôi rất vui khi được đặt nhiều như yêu cầu nhưng không muốn gây khó chịu trong bài đăng.
Nếu bạn chạy điều này trong một vòng lặp chặt chẽ, bạn có thể xử lý bao nhiêu hình ảnh/giây ở kích thước hình ảnh đầu vào/đầu ra nào? –
Nếu tôi chỉ chạy hình ảnh thay đổi kích thước một phần của mã cục bộ tôi có thể thay đổi kích thước 1000 hình ảnh trong 45 giây hoặc lâu hơn. Nhập 873x655 và đổi kích thước và cắt thành 300x250. –
Điều gì đó chắc chắn sai. [Thư viện ImageResizer cho ASP.NET] (http://imageresizing.net) sử dụng GDI + nội bộ và có * nhiều * thông lượng cao hơn. Tôi nghi ngờ đó là do cách I/O được xử lý - đệm luồng tệp vào bộ nhớ trước khi tạo một cá thể Image/Bitmap loại bỏ một số lỗi đồng thời nhất định. –