amir_pro
جمعه 01 خرداد 1394, 11:44 صبح
سلام دوستان
مشکلی که تو wpf بهش برخوردم اینه که اگر قرار باشد تعدادی تصویر مثلا 400 طبق رویدادی مثلا حرکت موس تغییر کنند بعد از مدتی برنامه با کمبود حافظه مواجه می شود و مشخصه که پیغام خطای زیر An unhandled exception of type 'System.Runtime.InteropServices.ExternalException' occurred in System.Drawing.dll
Additional information: A generic error occurred in GDI+.
فرمت تصاویر به صورتی هست که برای نشون دادنشون از کلاسهای Bitmap و BitmapSource مجبورم استفاده کنم و در نهایت شی ساخته شده از کلاس BitmapSource را به خاصیت Source آبجکت Image بایند میکنم
خطی که باعث گرفتن حافظه میشه خط زیر است:
image2Show.Source = output;
سورس تصویر را null کردم و از GC استفاده کردم حافظه را آزاد نمیکنه. همه متغیرها که به صورت محلی برای نمایش تصاویر استفاده شده را dispose کردم باز حافظه آزاد نمیشه
اینم میدونم که تا وقتی از داخل برنامه به یک آبجکت لینکی وجود داشته باشه GC عمل نمیکنه
خیلی جستجو کردم اما هنوز به راه حلی نرسیدم
اینم سورس برنامه:
System.Drawing.Bitmap bmp = presentationImage.DrawToBitmap(width, height);
BitmapSource output = System.Windows.Interop.Imaging.CreateBitmapSourceF romHBitmap(bmp.GetHbitmap(),
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromWidthAndHeight(width, height));
image2Show.Source = output;
width و height نشون دهنده رزولوشن است که 512 گذاشتم
مشکلی که تو wpf بهش برخوردم اینه که اگر قرار باشد تعدادی تصویر مثلا 400 طبق رویدادی مثلا حرکت موس تغییر کنند بعد از مدتی برنامه با کمبود حافظه مواجه می شود و مشخصه که پیغام خطای زیر An unhandled exception of type 'System.Runtime.InteropServices.ExternalException' occurred in System.Drawing.dll
Additional information: A generic error occurred in GDI+.
فرمت تصاویر به صورتی هست که برای نشون دادنشون از کلاسهای Bitmap و BitmapSource مجبورم استفاده کنم و در نهایت شی ساخته شده از کلاس BitmapSource را به خاصیت Source آبجکت Image بایند میکنم
خطی که باعث گرفتن حافظه میشه خط زیر است:
image2Show.Source = output;
سورس تصویر را null کردم و از GC استفاده کردم حافظه را آزاد نمیکنه. همه متغیرها که به صورت محلی برای نمایش تصاویر استفاده شده را dispose کردم باز حافظه آزاد نمیشه
اینم میدونم که تا وقتی از داخل برنامه به یک آبجکت لینکی وجود داشته باشه GC عمل نمیکنه
خیلی جستجو کردم اما هنوز به راه حلی نرسیدم
اینم سورس برنامه:
System.Drawing.Bitmap bmp = presentationImage.DrawToBitmap(width, height);
BitmapSource output = System.Windows.Interop.Imaging.CreateBitmapSourceF romHBitmap(bmp.GetHbitmap(),
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromWidthAndHeight(width, height));
image2Show.Source = output;
width و height نشون دهنده رزولوشن است که 512 گذاشتم