نقل قول: عدم نمایش عکس ها
سلام
با لود اینهمه عکس هم پردازش سیستمتون بالا میره هم مصرف حافظه.
بهتره برای این مورد از صفحه بندی استفاده کنید. برای مثال ابتدا ده عکس رو نشون بدید بعد اگه کاربر کلید صفحه بعد رو زد ده تای بعدی رو نشون بدید.
نقل قول: عدم نمایش عکس ها
نقل قول:
نوشته شده توسط
رامین مرادی
سلام
با لود اینهمه عکس هم پردازش سیستمتون بالا میره هم مصرف حافظه.
بهتره برای این مورد از صفحه بندی استفاده کنید. برای مثال ابتدا ده عکس رو نشون بدید بعد اگه کاربر کلید صفحه بعد رو زد ده تای بعدی رو نشون بدید.
عکس هایی که لود میکنم خیلی با کیفیت هستند و اینکاری که میگید رو انجام دادم ولی باز بعد از لود تعدادی عکس همون مشکل پیش میاد.
چطور میشه بعد از لود یه تعداد عکس در برنامه با بستن پنجره نمایش ، حافظه رم اختصاص یافته را آزاد کرد.فکر کنم اینطوری مشکل حل بشه .راهش بلد نیستم
نقل قول: عدم نمایش عکس ها
مهندسین محترم کمک کنند نیاز شدید دارم
نقل قول: عدم نمایش عکس ها
شما لطفا کدهاتون رو بذارید اینجوری که نمیشه کمکی کرد
نقل قول: عدم نمایش عکس ها
یه بار قبل از هربار فراخوانی عکسهای جدید این کد رو اجرا کنید و نتیجه رو بگید
GC.Collect();
GC.WaitForPendingFinalizers();
نقل قول: عدم نمایش عکس ها
نقل قول:
نوشته شده توسط
mr.sirwan
شما لطفا کدهاتون رو بذارید اینجوری که نمیشه کمکی کرد
try
{
if (!string.IsNullOrWhiteSpace(_path))
{
Image im = Image.FromFile(_path);
if (im.Width > im.Height)
{
this.Width = 710;
this.Height = 560;
}
else
{
this.Width = 510;
this.Height = 630;
}
im.Dispose();
pbox.Load(_path);
}
}
catch (Exception)
{
}
نقل قول: عدم نمایش عکس ها
نقل قول:
نوشته شده توسط
رامین مرادی
یه بار قبل از هربار فراخوانی عکسهای جدید این کد رو اجرا کنید و نتیجه رو بگید
GC.Collect();
GC.WaitForPendingFinalizers();
یک مقدار درباره کدها توضیح میدید لطفا
GC چی هست؟
نقل قول: عدم نمایش عکس ها
نقل قول:
نوشته شده توسط
glyas47
یک مقدار درباره کدها توضیح میدید لطفا
GC چی هست؟
بهتره یه بار این مقاله رو مطالعه کنید
https://programming.tosinso.com/fa/t...a-%d9%86%d8%aa
GC برای مدیریت حافظه هستش.مقاله رو بخونید کامل درک میکنید.
نقل قول: عدم نمایش عکس ها
نقل قول:
نوشته شده توسط
رامین مرادی
بسیار متشکرم:تشویق:
نقل قول: عدم نمایش عکس ها
پیشنهاد میکنم در زمان دخیره کردن تصاویر حتما یک Thumbnail بسازید و تا زمانی که به خود عکس اصلی کاری ندارید، برای مرور و کارهای متفرقه از Tumbnail های کم حجم استفاده کنید. همچنین در بکارگیری متغیرها اگر امکان داشت حتما متغیر رو Dispose کنید. میتونید از Using هم استفاده کنید(اگر امکان داشت).
1 ضمیمه
نقل قول: عدم نمایش عکس ها
نقل قول:
نوشته شده توسط
glyas47
سلام من یه برنامه شبیه گالری عکس درست کردم که بعد از مشخص کردن پوشه موردنظر ، برنامه عکس های درون آنرا بصورت گالری در پنجره ای پشت هم باز میکند که میتوان بعد از کلیلک روی هر عکس ، بزرگ شده عکس را در پنجره ای داخل برنامه مشاهده کرد ولی زمانیکه 50 یا بیشتر عکس که داخل برنامه بارگزاری میشه دیگه بعد از آن هیچ عکسی داخل picturebox های برنامه نمایش داده نمیشه تا اینکه برنامه را کلا ببندم و دوباره باز کنم که دوباره تا تعدادی عکس نمایش بده .هیچ اروری هم نمیده فقط دیگه نمایش نمیده.
باید چه کنم؟
مثال پیوستی رو ببینید :
ضمیمه 151004
اصولی که من در اینجور موارد رعایت می کنم اینهاست :
- اگر کاربر در این لحظه باید تصویر شماره 4 رو ببینه، اولویت اینه که با حداکثر سرعت تصویر شماره 4 فراخوانی و نمایش داده بشه. سایر عملیاتی که میخواهیم انجام بدیم باید در اولویت های بعدی قرار بگیرند.
- خوبه که چندین عکس رو فراخوانی کنم و در cache نگهدارم ولی هرگز کاربر رو برای فراخوانی تصاویری که الان نمیخواد ببینه معطل نخواهم کرد.
- چون معمولا مرور تصاویر به سمت بالا و پایین لیست فایل ها است و پیمایش متوالی است، چند تصویر قبلی و چند تصویر بعدی رو در حافظه cache فراخوانی می کنم تا سرعت نمایش اونها افزایش پیدا کنه.
- فراخوانی باید در نخ مجزایی باشه، نه در نخ اصلی برنامه تا برنامه موقع فراخوانی سکته نکنه.
- در کار GC دخالت نخواهم کرد، وظیفه من به عنوان برنامه نویس یک زبان سطح بالا مثل #C که مدیریت حافظه خودکار داره اینه که هر زمان که دیدم دیگر نیازی به یک شی Disposable شدنی ندارم، به سادگی Dispose اش کنم، فقط همین.
اینکه حافظه های بلااستفاده مدیریت شده (Managed) در همون لحظه آزاد نمیشه دلایل منطقی داره، بیخودی نیست که GC در آزاد کردنشون عجله نمیکنه.
من به GC درخواست نمیدم که یالا آزادشون کن، دخالت نمی کنم. GC خودش هر زمانی که مفید بدونه حافظه بلااستفاده رو آزاد میکنه تا به سیستم عامل برگردونه.
GC عملکرد بی نقص و فوق العاده ای نداره اما دخالت من هم اونقدر ها که بنظر خودم میاد مفید نیست.
- از Image.FromFile استفاده نخواهم کرد، چون روتینش طوریه که فایل رو بعد باز کردن گرو نگه میداره و Lock میشه و کاربر نمیتونه فایلش رو Rename یا Delete یا ... بکنه، حتی وقتی دیگه تصویر رو نمیبینه.
وقتی کاربر تصویری رو روی فرم نمیبینه از دید اون نباید فایلش مشغول باشه. وقتی اطلاعات تصویر رو در حافظه RAM خوندیم اساسا دیگه احتیاجی به فایلش نداریم.
بجای Image.FromFile خودم فایل رو میخونم و Image.FromStream رو بکار می برم تا بعدش فایل رو ببندم.
نقل قول: عدم نمایش عکس ها
نقل قول:
نوشته شده توسط
the king
مثال پیوستی رو ببینید :
ضمیمه 151004
اصولی که من در اینجور موارد رعایت می کنم اینهاست :
- اگر کاربر در این لحظه باید تصویر شماره 4 رو ببینه، اولویت اینه که با حداکثر سرعت تصویر شماره 4 فراخوانی و نمایش داده بشه. سایر عملیاتی که میخواهیم انجام بدیم باید در اولویت های بعدی قرار بگیرند.
- خوبه که چندین عکس رو فراخوانی کنم و در cache نگهدارم ولی هرگز کاربر رو برای فراخوانی تصاویری که الان نمیخواد ببینه معطل نخواهم کرد.
- چون معمولا مرور تصاویر به سمت بالا و پایین لیست فایل ها است و پیمایش متوالی است، چند تصویر قبلی و چند تصویر بعدی رو در حافظه cache فراخوانی می کنم تا سرعت نمایش اونها افزایش پیدا کنه.
- فراخوانی باید در نخ مجزایی باشه، نه در نخ اصلی برنامه تا برنامه موقع فراخوانی سکته نکنه.
- در کار GC دخالت نخواهم کرد، وظیفه من به عنوان برنامه نویس یک زبان سطح بالا مثل #C که مدیریت حافظه خودکار داره اینه که هر زمان که دیدم دیگر نیازی به یک شی Disposable شدنی ندارم، به سادگی Dispose اش کنم، فقط همین.
اینکه حافظه های بلااستفاده مدیریت شده (Managed) در همون لحظه آزاد نمیشه دلایل منطقی داره، بیخودی نیست که GC در آزاد کردنشون عجله نمیکنه.
من به GC درخواست نمیدم که یالا آزادشون کن، دخالت نمی کنم. GC خودش هر زمانی که مفید بدونه حافظه بلااستفاده رو آزاد میکنه تا به سیستم عامل برگردونه.
GC عملکرد بی نقص و فوق العاده ای نداره اما دخالت من هم اونقدر ها که بنظر خودم میاد مفید نیست.
- از Image.FromFile استفاده نخواهم کرد، چون روتینش طوریه که فایل رو بعد باز کردن گرو نگه میداره و Lock میشه و کاربر نمیتونه فایلش رو Rename یا Delete یا ... بکنه، حتی وقتی دیگه تصویر رو نمیبینه.
وقتی کاربر تصویری رو روی فرم نمیبینه از دید اون نباید فایلش مشغول باشه. وقتی اطلاعات تصویر رو در حافظه RAM خوندیم اساسا دیگه احتیاجی به فایلش نداریم.
بجای Image.FromFile خودم فایل رو میخونم و Image.FromStream رو بکار می برم تا بعدش فایل رو ببندم.
متاسفانه فایلتون رو ویروس میشناسه امکانش هست کد هارو بزارید؟ یا فایل اجراییش رو پاک کنید بعد همینجا اپلود کنید؟ممنون
1 ضمیمه
نقل قول: عدم نمایش عکس ها
نقل قول:
نوشته شده توسط
رامین مرادی
متاسفانه فایلتون رو ویروس میشناسه امکانش هست کد هارو بزارید؟ یا فایل اجراییش رو پاک کنید بعد همینجا اپلود کنید؟ممنون
اینم نتیجه بررسی همون فایل با 59 ویروس کش :
No engines detected this file
ضمیمه 151348