PDA

View Full Version : مشكل با خطاي Out of Memory ؟



Nima NT
شنبه 12 دی 1388, 18:52 عصر
با عرض سلام و وقت به خير خدمت دوستان گرامي
بنده مدتي هست كه مشكلي با دلفي دارم و هركاري كردم نتونستم اين مشكل رو حل كنم ؛ دلفي براي Procedure هاي طولاني خطاي Out of Memory رو توليد ميكنه.
دوستان آيا راه حلي به جز كوتاه كردن طول رويه دارن ؟


---
ممنونم.

Hamid.Kad
شنبه 12 دی 1388, 19:24 عصر
حتماً توی پروسیجرتون یه سری دستورات دارید که باعث مصرف حافظه میشه. اگه امکانش هست کدتون رو بگذارید.
منطقی وجود نداره که بخاطر طولانی بودن دستورات این خطا ظاهر بشه. مطمئن باشید اشکال از دستوراته

Nima NT
شنبه 12 دی 1388, 20:37 عصر
اين مشكل ( خطا ) زماني ظاهر ميشه كه ميخوام پروژه رو كامپايل كنم ؛ يعني كار به اجرا نميكشه پس فكر نميكنم مشكل از مصرف حافظه زياد باشه.

vcldeveloper
شنبه 12 دی 1388, 21:19 عصر
Procedure طولانی یعنی چقدر طولانی؟ چند خط کد در اون Procedure اجرا میشند؟ البته از نظر اصول کد نویسی نباید یک Procedure خیلی طولانی باشه، و در صورت طولانی بودن، باید Refactor بشه به چند Procedure یا تابع کوچکتر.

در هر حال باید بشه این مشکل را Reproduce کرد تا بشه درباره اش نظر داد.

Nima NT
شنبه 12 دی 1388, 22:02 عصر
دقيقا" 2150 خط كد هستش.
مساله اينجاست كه وقتي اين كدها رو تكه تكه ميكنم ، سرعت پائين مياد ، يكي از دوستان ميگفت ابزارهايي وجود دارن كه اين مشكل دلفي رو تا حدي حل ميكنن ، آيا همچين چيزي درسته ؟ يا اينكه نه تنها راه حل كوتاه كردن رويه هستش ؟


ممنونم.

vcldeveloper
شنبه 12 دی 1388, 23:16 عصر
دقيقا" 2150 خط كد هستش.
توی یک Procedure؟!!!

متغیرهایی که استفاده می کنید چطوری تعریف شدند؟ اگر تعداد متغیرهای محلی داخل Procedure زیاد باشه، یا حجم زیادی اشغال کنند، با توجه به اینکه این متغیرها در Stack ذخیره میشند، ممکن هست با کمبود فضا در stack مواجه بشید.



مساله اينجاست كه وقتي اين كدها رو تكه تكه ميكنم ، سرعت پائين مياد ، يكي از دوستان ميگفت ابزارهايي وجود دارن كه اين مشكل دلفي رو تا حدي حل ميكنن
Procedure رو که باید حتما کوتاه کنید، و گرنه بعدا به مشکل برمیخورید. برای کاهش سرعت، می تونید با استفاده از الگوریتم های مناسب، و طراحی مناسب کاهش سرعت را به حداقل برسونید. البته بعضی از توابع را هم می تونید inline کنید (البته در دلفی 2009 و 2010).
همه توابع را inline نکنید! اون وقت فرقی با حالت فعلی نخواهد کرد.

Nima NT
یک شنبه 13 دی 1388, 00:28 صبح
بسيار ممنونم ، تقريبا" مشكلم حل شد.