-
not responding
سلام.
یه برنامه نوشتم که یه سری اعداد رو از دیتابیس بیرون میکشه و ازشون استفاده میکنه.دیتابیس خیلی بزرگ هست و سنگین.
مشکل اینجاست که زمانی که برنامه رو با خود دلفی اجرا میکنم فقط هنگ میکنه و بعد از یه مدت دوباره شروع به کار میکنه اما وقتی فایل EXE خروجی رو اجرا میکنه NOT Responding میشه و دیگه ادامه اجرا نمیشه.دلیل این اتفاق چیه؟
اگر مشکل not responding حل بشه هنگ کردنشو میشه با مولتی ترد کردن حل کرد.
-
نقل قول: not responding
تفاوت "هنگ کردن" با "Not Responding شدن" چیه ؟
هنگ کردن و Not Responding شدن یک دلیل مشخص نداره و با توجه به توضیحاتی که نوشتید، نمیشه به جواب درستی رسید
یک عملیات زمانبر رو دارید در Event نامناسبی و با روش نامناسبی انجام میدید که باعث میشه برنامه هنگ کنه
باید اون عملیات رو بگید که چی هستش و چطور داره انجام میشه تا راه حل بهتری براش پیدا بشه
-
نقل قول: not responding
زمانی که not responding میده فرم رو میشه تکون داد و عملیات هم متوقف میشه و برنامم دیگه از حالت هنگ بیرون نمیاد تا باز و بستش نکنم.
اما زمانی که هنگ میکنه فرم رو نمیشه تکون داد اما برنامه داره کارشو انجام میده و وقتی کارش تمام شد از هنگ در میاد خود به خود.
دارم چندتا کوری به sql server میفرستم و تا زمانی که جواب رو از سرور دریافت نکردم برنامه هنگ میکنه (با اجرا توسط دلفی) و یا not responding میده (فایل کامپایل شده)
یه سوال دیگه؟
اگر از ترد استفاده کنم و از adoquery که روی فرم گزاشتم استفاده کنم بازم برنامه و فرمم هنگ میکنه؟
-
نقل قول: not responding
سلام.
با همون اشیای ADO و با ست کردن ExecutionOption قسمت های Async می تونید این هنگی رو از بین ببرید، فقط مشکل دیگه ای ممکنه پیدا کنید که برنامه صبر نمی کنه تا دیتاست شما باز بشه، و ادامه کار می ده.
می تونید از کامپوننت های دیگه ای که برای اسینک کار کردن وجود دارند استفاده کنید.
ولی بهتره قبل از همه اینها، بررسی کنید ببینید که چرا این همه زمان طول می کشه، ممکنه بشه کوئری رو مناسب تر نوشت، ممکنه بشه کوئری رو در زمان دیگه ای ران کرد، ممکنه بشه با همون اسینک کار کرد، و ممکنه در نهایت در ترد جداگانه ای کار رو راه انداخت.
قبل از همه چیز، باید دقیق بدونید چه کوئری ای و در کجا ران می شه و وابستگی های برنامه به این کوئری در چه حدی هست، آیا می شه اون رو معوق کرد یا نه ..