PDA

View Full Version : کاهش سرعت اجرای برنامه و crash



tabatabaeisa
دوشنبه 25 آبان 1394, 22:12 عصر
درود به همه دوستان و فعالان؛
من یه برنامه C#‎‎‎‎‎‎‎‎‎‎ دارم که توی این برنامه قراره یه سری آبجکت (40 تا 50 تا تقریبا) پردازش بشن که کاربر میتونه اونها رو از طریق checkboxهای تعبیه شده برای هر کدوم انتخاب کنه.
کار اصلی برنامه که پردازش آبجکت های انتخابی کاربر هست توسط یه dll که در محیط visual C++‎‎‎‎‎‎‎‎‎‎ نوشته شده انجام میشه، به این صورت که آبجکت های انتخابی درون صف قرار میگیرن و دونه دونه براشون تابع پردازش کننده از dll فراخونی و خروجی مربوطه تولید میشه.
توی dll برای استفاده از قابلیت multithreading از کتابخونه boost استفاده کردم که چون به ازای هر آبجکت انتخابی باید چیزی حدود 4000 تا فایل پردازش بشه چندتا ترد ایجاد میکنم و تعداد فایلها رو تقسیم میکنم بین تردها تا پردازش ها رو انجام بدن.
دوتا مشکل دارم که امیدوارم دوستان راهنمایی کنن:
1- اگه آبجکتها دونه دونه انتخاب بشن و بعد دستور پردازش اجرا بشه برنامه به مرور کند میشه و از اون سرعت مورد انتظارش خیلی کم میشه.
به این صورت که مثلا برای پردازش آبجکت اول با توجه به استفاده از multithreadig میزان استفاده از CPU حدود 90% و پردازش به سرعت انجام میشه، این روند ادامه داره اما با ادامه دادن اجرا مثلا تو آبجکت ششم یا هفتم برنامه شروع به کند شدن میکنه و درصد استفاده از CPU به 20% میرسه و برنامه خیلی کند پیش میره.
2- اگه select all کنم و دستور پردازش رو بدم پس از پردازش مثلا 10 یا 11 تا از آبجکت ها برنامه crash میکنه!

دوستان درابتدا خیلی عذر میخوام اگه زیاده گویی کردم و بعد هم خواهش میکنم برای رفع این مشکل راهکارهاتون رو دریغ نکنید.
بی صبرانه منتظر نظرات کارگشای شما خواهم بود چون واقعا شده یه معضل بدون جواب برای من تقریبا مبتدی!
با سپاس فراوان و بدرود.

ژیار رحیمی
چهارشنبه 11 آذر 1394, 12:31 عصر
سلام با این اوصاف شما dll رو با ++C نوشتی و با #C داری ازش استفاده میکنی.مشکل اصلی برمیگرده به dll شما که احتمال زیاد در نحوه پیاده سازی MultiThreading و مدیریت خافظه کم کاری کردی.شما در حالت پردازش تک تک اونطور که شما بیان کردی بعد از چند پردازش رو به کندی میاره در dll منابع استفاده شده در پردازش رو به موقع آزاد نکردی .دوست گرامی برای رفع مشکل برگردد به کد های dll و تا جایی که امکان داره کدهانو اصلاح کن.الان در#C کاری ازدستت برنمیاد که باز مجدد از Thread استفاده کنی جهت بالا بردن پردازش موازی.

tabatabaeisa
پنج شنبه 12 آذر 1394, 17:09 عصر
ممنون از پاسختون.
من برای Multithreading از کتابخانه boost استفاده کردم. میشه در رابطه با آزاد سازی منابع و نحوه پیاده سازی درست این روند راهنمایی کنید.
واقعا به یه راهنمایی تو این زمینه نیاز دارم.