PDA

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



M * M * A
جمعه 11 مرداد 1387, 23:39 عصر
با سلام و خسته نباشید
من چه جوری میتونم , تایعی را که نوشتم در پشت زمینه اجرا کنم.
////////////////////////

من وقتی وارد یکی از فرم های برنامه امکه میشوم حدود 5 ثانیه ای فرم قفل میکنه.چون یک تابع فراخوانی میشه که مانده حساب مشتری را میدهد..
من چه جوری میتونم از این تابع استفاده کنم که صفحه فرم من قفل نکند و کاربر به کار عادی خود ادامه دهد و وقتی کار تابع تمام شد مانده حساب را در جای مشخص شده خود نشان دهد؟

با تشکر

H2K
شنبه 12 مرداد 1387, 00:50 صبح
سلام دوست عزيز به نظرِ من استفاده از backgroundWorker يا Thread كارتون رو راه
ميندازه

M * M * A
شنبه 12 مرداد 1387, 06:33 صبح
میشه چند تا مثال بفرستید؟

Masiha1986
شنبه 12 مرداد 1387, 10:26 صبح
با سلام
پروژه نمونه رو از قسمت فایل های پیوست شده دریافت کن.

M * M * A
یک شنبه 13 مرداد 1387, 13:22 عصر
من یک تابع دارم که هر وقت فراخونی میشه چند ثانیه ای صفحه فقل میکنه .

من اینو چه کار کنم.نمی خواهم صفحه قفل بشه. چون کاربر باید فیلدهای دیگر را تنظیم کند.

ASKaffash
یک شنبه 13 مرداد 1387, 13:29 عصر
سلام
درون تابع و درونی ترین بخش تابع این کد را اضافه کنید :
Application.DoEvents();

danial82
یک شنبه 13 مرداد 1387, 21:08 عصر
احتمالا درون برنامه ات از dataset استفاده میکنی اگه اینجوریه اونو حذف کن و از datareader استفاده کن
این لینک رو بین http://barnamenevis.org/forum/showthread.php?t=73023

oVERfLOW
یک شنبه 13 مرداد 1387, 22:29 عصر
جدا از سوالی که شما پرسیدید

طراحی برنامه‌ی شما ضعیف هست
اگه فرایندی این مقدار زمان می‌بره بهتره از Cache داده‌ها استفاده کنید
به این معنی که یه جدول یا یک ستون اضافه توی پایگاه داده‌تون ایجاد کنید و مقادیری که نیاز به پردازش زیاد داره رو اونجا نگهداری کنید

فقط در زمان‌های مورد نیاز و زمانی که اطمینان دارید داده‌ها باید عوض بشن محاسبه رو انجام بدید

mehdi.mousavi
دوشنبه 14 مرداد 1387, 00:25 صبح
سلام درون تابع و درونی ترین بخش تابع این کد را اضافه کنید :
Application.DoEvents();


سلام.
اینکار مطلقا صحیح نیست و میتونه بیشتر از اینکه مشکل گشا باشه؛ مشکلات جدیدی رو بوجود بیاره. مطالب بسیار زیادی در اینباره روی اینترنت منتشر شده، که یکی از اونها رو میتونید در این Weblog (http://blogs.msdn.com/jfoscoding/archive/2005/08/06/448560.aspx) مطالعه کنید. بنابراین ازتون خواهش میکنم این پیشنهاد رو دیگه مطرح نکنید و خوتون هم هرگز ازون استفاده نکنید.

ASKaffash
دوشنبه 14 مرداد 1387, 09:20 صبح
سلام.
اینکار مطلقا صحیح نیست و میتونه بیشتر از اینکه مشکل گشا باشه؛ مشکلات جدیدی رو بوجود بیاره. مطالب بسیار زیادی در اینباره روی اینترنت منتشر شده، که یکی از اونها رو میتونید در این Weblog (http://blogs.msdn.com/jfoscoding/archive/2005/08/06/448560.aspx) مطالعه کنید. بنابراین ازتون خواهش میکنم این پیشنهاد رو دیگه مطرح نکنید و خوتون هم هرگز ازون استفاده نکنید.

سلام دوست من
من با شما موافق نیستم استفاده از یک روش برای همه کارها مناسب نیست برای مسائل ساده نباید پیچیدگی ایجاد کرد برایت مثال بزنم :
برای یک بچه پنجم دبستان برای محاسبه مساحت یک مثلث روش استفاده از انتگرال دوگانه را پیشنهاد نمی کنید بلکه روش ساده محاسبه مثلث را پیشنهاد میدهید (چون مخاطب و سطح مسئله هم مهم است ) بعدها اینفرد وقتی رفت دانشگاه و در رشته های مرتبط با ریاضی مواجه شد به او می آموزند که با روشهای سیمسون و انتگرال دوگانه و ... میتوانید مساحت هر مثلثی را نیز حساب کنید. دوست من اگر DoEvents کاملا اشتباه است پس چرا مایکروسافت تاهمین 2008 نیز این دستور را حذف نمی کند ؟
بنظرم نوشتن جمله شما بدون پرسیدن سطح سئوال از مخاطب به معنی آیه منزل تلقی میگردد و ته دل خوانندگان مبتدی این تاپیک را خالی میکند.
ببخشید صریح حرف زدم چون این تاپیکها اساس آنها برآموزش استوار است و گفتن یک جمله با یقین کمی جای تامل دارد در ضمن لینک را هم نگاه کردم

mehdi.mousavi
دوشنبه 14 مرداد 1387, 11:52 صبح
سلام دوست من
من با شما موافق نیستم استفاده از یک روش برای همه کارها مناسب نیست برای مسائل ساده نباید پیچیدگی ایجاد کرد برایت مثال بزنم : برای یک بچه پنجم دبستان برای محاسبه مساحت یک مثلث روش استفاده از انتگرال دوگانه را پیشنهاد نمی کنید بلکه روش ساده محاسبه مثلث را پیشنهاد میدهید (چون مخاطب و سطح مسئله هم مهم است ) بعدها اینفرد وقتی رفت دانشگاه و در رشته های مرتبط با ریاضی مواجه شد به او می آموزند که با روشهای سیمسون و انتگرال دوگانه و ... میتوانید مساحت هر مثلثی را نیز حساب کنید. دوست من اگر DoEvents کاملا اشتباه است پس چرا مایکروسافت تاهمین 2008 نیز این دستور را حذف نمی کند ؟ بنظرم نوشتن جمله شما بدون پرسیدن سطح سئوال از مخاطب به معنی آیه منزل تلقی میگردد و ته دل خوانندگان مبتدی این تاپیک را خالی میکند. ببخشید صریح حرف زدم چون این تاپیکها اساس آنها برآموزش استوار است و گفتن یک جمله با یقین کمی جای تامل دارد در ضمن لینک را هم نگاه کردم

سلام.
اگر دوست دارید برنامه اتون Error-Prone باشه خوب اونکاری که فکر میکنید صحیح هستش انجام بدین. اگر میدونستید که این متود میتونه باعث reentrency بشه، اگر میدونستید Message Queue چیه و چه فرقی بین PeekMessage و GetMessage هست، اگر میدونستید فرق یه Main Thread و یه Worker Thread چیه و Handle به یه Window یعنی چی و چه محدودیتهایی در هنگام دستیابی همزمان به صف پیامها وجود داره، متوجه می شدید که من با شما پدر کشتگی ندارم و هنوزم رو جمله ای که گفتم پافشاری میکنم.

اگر Software توسط یه Architect متبحر طراحی بشه، هرگز نیازی به استفاده از این "جینگولک" بازیها نیست. TerminateThread هم تو Windows بعنوان یه API فکر میکنم 15 ساله که اونجاست، اما آیا برنامه نویسان خوب از این API برای متوقف کردن Thread استفاده میکنن؟ مطلقا خیر. اونها میدونن که این تابع فقط باید در شرایط MOST EXTREME و بحرانی صدا زده بشه. در صورتیکه جوجه برنامه نویسای امروزی فکر میکنن که برای متوقف کردن یه Thread باید از abort (در C#) استفاده کنن و به استفاده از این تابع هم دامن میزنن. DoEvents هم شرایط مشابهی داره. همونطور که گفتم، بیشتر از اینکه بتونه مشکل گشا باشه، مشکل زاست!

ASKaffash
دوشنبه 14 مرداد 1387, 12:54 عصر
سلام
دوست من فکر می کنم که محتوای تاپیک 10 را به دقت مطالعه نکردید و مخاطب را مد نظر قرار نمی دهید در ضمن بحث علمی است نه مجادله شخصی در هر صورت منظور من خدای نکرده توهین به شما نیست ولی لحن شما کمی تند است ! (در ضمن موارد کاربرد Thread را میدانم هر روش متناسب با شرایط خودش مقرون به صرفه تر است)

mehdi.mousavi
دوشنبه 14 مرداد 1387, 13:10 عصر
سلام
دوست من فکر می کنم که محتوای تاپیک 10 را به دقت مطالعه نکردید و مخاطب را مد نظر قرار نمی دهید در ضمن بحث علمی است نه مجادله شخصی در هر صورت منظور من خدای نکرده توهین به شما نیست ولی لحن شما کمی تند است ! (در ضمن موارد کاربرد Thread را میدانم هر روش متناسب با شرایط خودش مقرون به صرفه تر است)

سلام.
مهم نیست مخاطب کیه، یه آماتور یا یه حرفه ای. مهم اینه که نباید از DoEvents باری به هر جهت استفاده کرد، حتی اگر به ظاهر مقرون به صرفه باشه. اتفاقا به یه آماتور نباید گفت که برو اینکارو کن، چون اون 100% چیزی در مورد مطالبی که گفتم نمیدونه و بعدا که با شرایط پیچیده در Application اش مواجه بشه، مدتها زمان میبره (تازه اگر بتونه) مشکل رو پیدا و حل کنه. پس اگر از همون اول راه صحیح رو بره، دیگه هرگز به اون شرایط بحرانی هم بر نمیخوره و همه با خوشحالی به هدفشون میرسن.

مثالی هم که زدید کاملا Out Of Context هستش و نمیشه اونو به شرایط کنونی این Topic تعمیم داد.