में छवि आकार बदलने की दक्षता मैंने उपयोगकर्ता अपलोड की गई छवियों का आकार बदलने के लिए एक वेब सेवा लिखी है और सभी कार्य एक कार्यात्मक बिंदु से सही ढंग से काम करते हैं, लेकिन यह हर बार CPU उपयोग को स्पाइक करने का कारण बनता है। यह विंडोज सर्वर 2008 64 बिट पर चल रहा है। मैंने 32 और 64 बिट को संकलित करने की कोशिश की है और उसी परिणाम के बारे में जानकारी प्राप्त की है।सी # और .NET 3.5
सेवा के दिल इस समारोह है:
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;
}
मैं सेवा पर एक प्रोफाइलर रख दिया और यह इंगित करने के लिए समय के विशाल बहुमत GDI + पुस्तकालय अपने आप में खर्च किया जाता है लग रहा था और वहाँ ज्यादा नहीं है मेरे कोड में प्राप्त किया जाना है।
प्रश्न: क्या मैं यहां अपने कोड में कुछ चमकदार रूप से अक्षम हूं? ऐसा लगता है कि मैंने जो उदाहरण देखा है उसके अनुरूप है।
क्या जीडीआई + के अलावा पुस्तकालयों का उपयोग करने में लाभ होना चाहिए? मैंने जो बेंचमार्क देखा है, यह इंगित करता है कि जीडीआई + अन्य पुस्तकालयों की तुलना में अच्छी तरह से तुलना करता है लेकिन मुझे विश्वास करने के लिए पर्याप्त नहीं मिला।
क्या "असुरक्षित कोड" ब्लॉक का उपयोग करके लाभ प्राप्त किया जा सकता है?
अगर मुझे पर्याप्त कोड शामिल नहीं किया गया है तो कृपया मुझे बताएं ... मुझे अनुरोध के रूप में बहुत कुछ करने में खुशी है लेकिन पोस्ट में अप्रिय होना नहीं चाहता।
आप एक तंग पाश में इस चलाते हैं, कितने छवियों/सेकंड तुम क्या इनपुट/आउटपुट छवि आकार में संसाधित कर सकते हैं? –
यदि मैं स्थानीय रूप से कोड के आकार का आकार बदलता हूं तो मैं 45 सेकंड में एक 1000 छवियों का आकार बदल सकता हूं। इनपुट 873x655 और आकार बदल गया और 300x250 तक फसल। –
कुछ निश्चित रूप से गलत है। [एएसपी.नेट के लिए ImageResizer लाइब्रेरी] (http://imageresizing.net) आंतरिक रूप से जीडीआई + का उपयोग करता है और * * * उच्च थ्रूपुट है। मुझे संदेह है कि जिस तरह से I/O को संभाला जाता है - छवि/बिटमैप उदाहरण बनाने से पहले फ़ाइल स्ट्रीम को स्मृति में बफर करना कुछ समरूपता त्रुटियों को समाप्त करता है। –