View Full Version : دو تا مشکل! بسته شدن برنامه و قفل شدن آن!
yaas135
شنبه 21 آبان 1384, 11:00 صبح
سلام
یه برنامه هست حدود هزار خط کد داره و هر یک دقیقه یک بار همه این دستورات که بینشون کلی کوئری اس کیو ال اجرا میشه.
اما مشکل اینجاست که این برنامه بعد از چند ساعت فعالیت مداوم یک دفعه خودش بسته میشه.
دوم این که در حین کار هم وقتی برنامه داره اجرا میشه، اجزای دیگه فرم تا اجرای کامل دستورات غیر قابل استفاده میشن مثل کلیدها !
چیکار کنم که برنامه بعد از مدتی بسته نشه، و حین اجرا برنامه هنگ نکنه؟
ممنونم
مصطفی سمی زاده
شنبه 21 آبان 1384, 19:29 عصر
سلام.
من نمی دونم این کد که می گی چگونه نوشته شده؟ ولی من برنامه ای دارم که حدود 16000 خط است و پر از Query ولی مشکلی نداره. یک کم به manage برنامه توجه کن . اگه به من دسترسی داری و دوست داشته باشی می تونی Code رو بدی که کمکت کنم.
موفق باشی
vcldeveloper
یک شنبه 22 آبان 1384, 02:44 صبح
بسته شدن برنامه می تونه دلایل مختلفی داشته باشه، باید خودتون برنامه را تست و Debug کنید.
دوم این که در حین کار هم وقتی برنامه داره اجرا میشه، اجزای دیگه فرم تا اجرای کامل دستورات غیر قابل استفاده میشن مثل کلیدها !
چیکار کنم که برنامه بعد از مدتی بسته نشه، و حین اجرا برنامه هنگ نکنه؟
Query ها و سایر اجزاء برنامه را که عملیاتشون زمانبر هست را در یک Thread جدا اجرا کنید. درباره Multi threading هم قبلا بحث شده، می تونید جستجو کنید.
Naficy
یک شنبه 22 آبان 1384, 20:10 عصر
ناپدید شدن برنامه، معمولا (و نه همیشه) به معنی استفاده بیش از اندازه از حافظه است. (مخصوصا وقتیکه پس از یه مدت طولانی از اجرای برنامه چنین اتفاقی بیفتد)
بنابراین نخستین قدم، تشخیص این مساله است. برای اینکار هم می توانید از TaskManager ویندوز کمک بگیرید و روند افزایش حافظه مصرفی برتامه رو ببینید. آیا متغیرها و اشیایی هستند که رها نمی شوند؟ اما پیدا کردن (و در نتیجه رفع کردن) چنین اشیایی کار ساده ای نخواهد بود.
شاید بد نباشه سعی کنید متوجه شوید که در اجرای چه روالهایی حافظه آزاد نمی شود. برای نمایش میزان حافظه مورد استفاده در دلفی، از AllocMemSize و AllocMemCount هم می توانید استفاده کنید. کدام روال ها حافظه را می خورند؟
----------------------------------------------------------------------------
آقای کشاورز multi-threading را پیشنهاد کردند، یقینا استفاده از Thread های جداگانه مفید است؛ اما واقعا محتاج دقت بالایی در کدنویسی هستند. از طرف دیگر، معمولا تبدیل یک برنامه نوشته شده به چنین حالتی، کار ساده ای نیست. روش ساده تر، برای ایجاد وضعیتی که برنامه "هنگ" نکند، استفاده مرتب از Application.ProcessMessages حین انجام عملیات است. (که همچنان در برخی موارد نیاز به احتیاطهای خاصی دارد)
از طرف دیگر، کم بودن سرعت برنامه و هنگ کردن آن، دلایل مختلفی می تواند داشته باشد که باید همگی بررسی شوند. (دریافت از شبکه؟ query های حجیم و زمانبری که می توانند ساده شوند؟ مسایل جزیتر در الگوریتمها و...)
-------------------------------------------------------------------------------
در کل، آنچه سوال پرسیده اید (حافظه یا ناپدید شدن/سرعت) از مواردیست که تنها به کمک شناخت از برنامه و دیباگ و سعی و خطا می توان آنرا برطرف کرد. هیچ راه حل عمومی ای وجود ندارد.
yaas135
دوشنبه 23 آبان 1384, 10:10 صبح
ممنونم از لطفتون، چشم چک می کنم چیزهایی رو که فرمودید.
البته برای تست و محک سری هم به ثرید می زنم.
asdfghjkl
دوشنبه 23 آبان 1384, 22:42 عصر
هندل ها را چک کن میتوانید آن را در TaskManagr ببینید ممکن مشکل برنامه ات از استفاده زیادی از Handle ها باشد.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.