ورود

View Full Version : باقی ماندن نرم افزار میزبان در حافظه بعد از اتمام کار



Felony
جمعه 22 آبان 1388, 12:43 عصر
:لبخندساده:سلام ،
من یک برنامه Client و یک برنامه ی Server دارم ، وقتی برنامه ی سرور رو اجرا میکنم و بعد میبندمش به طور کامل پروسش بسته میشه و اثری ازش تو حافظه نیست ، ولی وقتی یک کلاینت بهش وصل میشه و برنامه ی کلاینت بدون اینکه Disconnect بشه بسته میشه وقتی برنامه ی سرور رو میبندم پروسش هنوز داخل حافظه هست و TaskManager اون رو تولیست پروسه ها نمایش میده ، چرا سرور تو حافظه باقی میمنونه ؟ با چه کدی میتونم این مشکل ور رفع کنم .

:چشمک:ممنون .

vcldeveloper
شنبه 23 آبان 1388, 00:54 صبح
احتمالا بخاطر این هست که Thread مربوط به اون کلاینت در سمت سرور همچنان در حال اجرا ست. اگر Threadایی در زمان بسته شدن Process در حال اجرا باشه، تا زمان خاتمه کار آن، Process در حافظه باقی می ماند، و بسته نمی شود.

Felony
شنبه 23 آبان 1388, 05:38 صبح
احتمالا بخاطر این هست که Thread مربوط به اون کلاینت در سمت سرور همچنان در حال اجرا ست. اگر Threadایی در زمان بسته شدن Process در حال اجرا باشه، تا زمان خاتمه کار آن، Process در حافظه باقی می ماند، و بسته نمی شود.

حالا راه حل چیه ؟ من تو تاپیک قبلیم تو همین بخش شبکه گفتم که موقع خروج از برنامه ی Client از سرور Disconnect میشم ، ولی سرور مثل اینکه نمیفهمه و همینطور تو حافظه میمونه ، ولی وقتی تو یک کلید کد مربوط به قطع هرتباط کلاینت رو مینویسم در سمت سرور مشکلی پیش نمیاد و از حافظه خارج میشه، فکر میکنم مشکل از کدی هست که برای خروج از برنامه ی کلاینت نوشتم ، تو تاپیک قبلیم هست ، کسی نظری نداره ؟

دلفــي
شنبه 23 آبان 1388, 15:46 عصر
:لبخندساده:سلام ،
من یک برنامه Client و یک برنامه ی Server دارم ، وقتی برنامه ی سرور رو اجرا میکنم و بعد میبندمش به طور کامل پروسش بسته میشه و اثری ازش تو حافظه نیست ، ولی وقتی یک کلاینت بهش وصل میشه و برنامه ی کلاینت بدون اینکه Disconnect بشه بسته میشه وقتی برنامه ی سرور رو میبندم پروسش هنوز داخل حافظه هست و TaskManager اون رو تولیست پروسه ها نمایش میده ، چرا سرور تو حافظه باقی میمنونه ؟ با چه کدی میتونم این مشکل ور رفع کنم .

:چشمک:ممنون .

قبل از بستن برنامه در رویداد OnClose شما ابتدا Server رو از حالت Active خارج کرده و Close کنید تا اگه کلاینتی هم هنوز بهش وصل است خودبه خود DC بشه و یا از دستور Socket.Disconnect استفاده کنید .

Felony
شنبه 23 آبان 1388, 16:20 عصر
قبل از بستن برنامه در رویداد OnClose شما ابتدا Server رو از حالت Active خارج کرده و Close کنید تا اگه کلاینتی هم هنوز بهش وصل است خودبه خود DC بشه و یا از دستور Socket.Disconnect استفاده کنید .

این کار رو کرده بودم ، ولی این پست شما باعث شد یک بار دیگه کدی که تو OnClose نوشتم رو بررسی کنم و دیدم برای تست یک موضوع یه کدی نوشته بودم که اون باعث این مشکل میشد ، در کل ممنون .