نفاد الذاكرة عند الحصول على صورة نقطية من خادم؟

StackOverflow https://stackoverflow.com/questions/2637073

سؤال

أقوم بعمل تطبيق يستخدم العديد من الصور. يحصل التطبيق على الصور من خادم ، ويقوم بتنزيلها واحدًا في كل مرة. بعد العديد من الصور ، يقوم إنشاء صورة نقطية بإرجاع استثناء ، لكنني لا أعرف كيفية حل هذا. ها هي وظيفتي لتنزيل الصور:

 public static Bitmap getImageFromWholeURL(String sURL)
    {

        HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(sURL);
        myRequest.Method = "GET";


        // If it does not exist anything on the url, then return null
        try
        {
            HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
            System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(myResponse.GetResponseStream());
            myResponse.Close();
            return bmp;
        }
        catch (Exception e)
        {
            return null;
        }

      }

هل يمكن لأي شخص مساعدتي هنا؟ شكرا لك مقدما!

هل كانت مفيدة؟

المحلول

"العديد من الصور" يرتبط بشكل وثيق مع نفاد الذاكرة. يمكن أن تصبح نقار النقطات كبيرة ، وسوف تأكل الكثير من الذاكرة الافتراضية غير المدارة. سيكون عليك أن تجعل البرنامج أكثر ذكاءً وتخزين نقطات أقل في الذاكرة. أو حفظها مؤقتًا إلى ملف. أو إعادة تنزيلها إذا لزم الأمر. وقم بتنظيف مواردهم بشكل صحيح باستخدام طريقة Dispose () ، خاصةً فئة Bitmap.

نصائح أخرى

دفق تلك الاستجابة على القرص بدلاً من الاحتفاظ بها في الذاكرة. ثم احتفظ بالمعلومات حول الصورة التي قمت بحفظها في مكان مؤقت بدلاً من الصورة نفسها.

إذا كنت تعرض كل شيء في صندوق صور (وبناءً على تعليقاتك ، أعتقد أنك) ، فعليك التخلص من الصور القديمة (إدخال المدونة هذا يساعد في شرحه):

if(myPictureBox.Image != null)
{
    myPictureBox.Image.Dispose();
}
myPictureBox.Image = getImageFromWholeURL(url);

كملاحظة جانبية على الأناقة ، من المفترض أن تكون أسماء الأسلوب pascalcase ، وليس Camelcase وسوف أفقد الفكرة المجرية على المعلمة.

ماذا تفعل مع كائنات system.drawing.bitmap؟ هل تبقي كل منهم في الذاكرة؟ ثم من المحتم أن تحصل على استثناء خارج الذاكرة في مرحلة ما.

بناءً على احتياجاتك ، يجب عليك تجاهل الصور في مرحلة ما. إذا كنت بحاجة إليها ، فقم بتخزينها في ملف في Flash. أيضًا ، حاول استخدام ملفات أحجام أصغر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top