PDA

View Full Version : بار زياد CPU



MOJTABAATEFEH
چهارشنبه 13 آبان 1388, 09:39 صبح
سلام دوستان عزيز من جستجو كردم ولي موردي رو پيدا نكردم من يك برنامه نوشتم كه نسبتا تو بعضي قسمتهاش دستورات SQL سنگيني داره حالا نمي دونم اين مشكل كه ميگم مال اين دستورات SQL باشه يا نه !
مشكل اينه كه دستورات به درستي اجر ا مي شوند ولي حتي بعد از اتمام دستور باز USAG CPU بلاي %90 مي مونه و مثلا ديگه برنامه نميتونه فرم هاي خودش رو ببنده و با زدن دكمه Close خود فرم هيچ اتفاقي نمي افته و فرم بسته نميشه ولي توي همون فرمي كه باز هست عمليات ديگه كم و بيش انجام ميشه براي كم كردن اين بار cpu چه راهي رو پيشنهاد مي كنيد؟

با تشكر

Felony
چهارشنبه 13 آبان 1388, 09:47 صبح
بارها بحث شده ، Thread مشکل شما رو حل میکنه .

MOJTABAATEFEH
چهارشنبه 13 آبان 1388, 09:50 صبح
ممنون دوست عزيز يعني اين مشكل به خاطر دستورات SQL هست؟
و Query رو در Thread قرار بدم؟

Felony
چهارشنبه 13 آبان 1388, 10:08 صبح
اولا من دستور SQL شما رو ندیدم و دوما خودتون دارید میگید دستورات عملیات سنگینی انجام میدن که اگر این حرفتون درست باشه مشکل از همون استفاده نکردن از Thread هست ، شما عملیات رو به نخ اصلی برنامه میسپارید و این نخ نمیتونه پاسخگوی تمام پردازش های مورد نیاز شما باشه ، احتمال 99% مشکلتون با تبدیل کردن دستورات به Thread های جداگانه حل میشه .

موفق باشید .

MOJTABAATEFEH
یک شنبه 24 آبان 1388, 22:49 عصر
من از Thread استفاده كردم موقع اجر اي Thread بار cpu كم ميشه ولي بعد از پايان كار Thread دوباره بار cpu خودبه خود بالا ميره حتي قبل و بدون انجام هر عمل ديگري دوست عزيز مشكل از چه چيزي مي تونه باشه؟ (در ضمن به جز يك ساعت آنالوگ روي فرم اصلي ديگه از هيچ تايمري در برنامه استفاده نشده است)

با تشكر

vcldeveloper
یک شنبه 24 آبان 1388, 23:45 عصر
Thread مشکل شما رو حل میکنه .
Thread بار CPU را کاهش نمیده! وقتی کاربر میگه میزان مصرف CPU بالای 90 درصد هست، شما 100 تا Thread هم که اضافه کنید، این Threadها که خودشان CPU تولید نمی کنند! اینها هم از همان CPU برای پردازش استفاده می کنند.


بعد از اتمام دستور باز USAG CPU بلاي %90 مي مونه و مثلا ديگه برنامه نميتونه فرم هاي خودش رو ببنده و با زدن دكمه Close خود فرم هيچ اتفاقي نمي افته و فرم بسته نميشه ولي توي همون فرمي كه باز هست عمليات ديگه كم و بيش انجام ميشه براي كم كردن اين بار cpu چه راهي رو پيشنهاد مي كنيد؟
معلوم نیست که برنامه شما چیکار میکنه. شما اول مشخص کنید که آیا واقعا Process برنامه شما در تمام این مدت بار CPU را افزایش میده یا Processهای دیگه، بعد کد خودتان را برسی کنید و مشخص کنید که کدام بخش از برنامه شما موجب افزایش بار CPU میشه، بعد مشخص کنید چه کدی در اون بخش عامل اصلی افزایش بار CPU هست، و چرا بعد از اینکه ظاهرا اجرای آن به پایان رسیده، همچنان به CPU بار سنگینی وارد میکنه.
برای این قبیل از تست ها از Profiler استفاده می کنند که میزان حافظه مصرفی، و بار محاسباتی هر بخش از کد را به برنامه نویس نمایش میده، تا برنامه نویس متوجه بشه گلوگاه برنامه کجا ست.

MOJTABAATEFEH
دوشنبه 25 آبان 1388, 00:10 صبح
قسمت cpuي process برنامه من در taskmanager بالاي 90 قرار مي گيره و usag كلي رو به 100% مي رسونه
لطفا راجع به Profiler بيشتر توضيح بدين

با تشكر

MOJTABAATEFEH
دوشنبه 25 آبان 1388, 11:20 صبح
از دوستان كسي تا بحال به اين مشكل برخورد نكرده؟

ب- تات
دوشنبه 25 آبان 1388, 23:14 عصر
ببين دوست گراميquery در لحظه اجرا شايد نفس بگيره اما بعدش نه. شما كارهاي زير رو تست كتيد:
1- آيا قبل از اجراي برنامه همه چيز طبيعي هست؟
2- پس از بروز مشكل نسك منيجر رو اجرا و پروسس هارو بر اساس CPU مرتب كنيد ببينيد كدام برنامه بيشتره؟
3- حال شروع به تست END PROCESS كردن به ترتيب CPU كنيد ببينيد شايد مشكل چيز ديگه باشه (ويروس)
4- برنامه رو اجرا و قبل از اجراي query كذايي وضعيت كاركرد تسك منيجر رو بررسي كنيد.
5- در كل اين اتفاقات با اجراي يك كوئري هر چند سنگبن نبايد بيافته.

نتيجه رو اعلام كنيد.

vcldeveloper
چهارشنبه 27 آبان 1388, 19:37 عصر
لطفا راجع به Profiler بيشتر توضيح بدين
http://en.wikipedia.org/wiki/Profiler_%28computer_science%29

یکی از پروفایل های خوبی که می تونید استفاده کنید (البته تجاری هست)، AutomatedQA AQTime هست.

MOJTABAATEFEH
پنج شنبه 28 آبان 1388, 23:03 عصر
ببين دوست گراميquery در لحظه اجرا شايد نفس بگيره اما بعدش نه. شما كارهاي زير رو تست كتيد:
1- آيا قبل از اجراي برنامه همه چيز طبيعي هست؟
2- پس از بروز مشكل نسك منيجر رو اجرا و پروسس هارو بر اساس CPU مرتب كنيد ببينيد كدام برنامه بيشتره؟
3- حال شروع به تست END PROCESS كردن به ترتيب CPU كنيد ببينيد شايد مشكل چيز ديگه باشه (ويروس)
4- برنامه رو اجرا و قبل از اجراي query كذايي وضعيت كاركرد تسك منيجر رو بررسي كنيد.
5- در كل اين اتفاقات با اجراي يك كوئري هر چند سنگبن نبايد بيافته.

نتيجه رو اعلام كنيد.

ممنون دوست عزيز بخش اعظم اين مشكل مربوط به يك فرم Popup بود كه پس از انجام كارش آزاد نمي شد و به صورت بي پايان يك كار را انجام مي داد
اين فرم Popup يك شرط داشت كه باعث آزاد شدن و خروجش مي شد و من بعضي از قسمتهاي كل Unit را تغيير دادم ولي فراموش كردم شرط را با تغييرات جديد هماهنگ كنم و اين باعث مي شد بي پايان شود

ب- تات
شنبه 30 آبان 1388, 17:47 عصر
خسته نباشيد. از اينكه مشكلتون رو پيدا كرديد خوشحال شدم . دقيقا هميشه بايد در همچين مواقعي دنبال loop ها باشيد.