پی سی سیتی

پی سی سیتی (http://p30city.net/index.php)
-   زبان های برنامه نویسی Programming (http://p30city.net/forumdisplay.php?f=12)
-   -   سرعت اجرای برنامه‌ها در زبان‌های مختلف (http://p30city.net/showthread.php?t=10968)

deltang 05-26-2009 06:08 PM

سرعت اجرای برنامه‌ها در زبان‌های مختلف
 
استفاده از دستورات كمتر

اولين چيزي كه براي بهبود سرعت يك برنامه به ذهن هر كس مي‌رسد، استفاده از تعداد دستورات كمتر است. مسلما هر دستور براي اجرا، زماني از وقت سيستم را به‌خود اختصاص مي‌دهد. هر چه تعداد دستورات كمتر باشد، به همان نسبت از زمان اجراي دستورات كاسته شده و سرعت نرم‌افزار زياد خواهد شد. البته در زمان كاهش دستورات، بايد به اين نكته توجه داشت كه گاهي كاستن از دستورات، خوانايي برنامه را پايين مي‌آورد و درك كد را مشكل‌تر مي‌سازد.
‌ ‌
با سرعت رايانه‌هاي امروزي، وجود 10 يا 100 دستور اضافه يا كمتر كه قرار است تنها يك بار اجرا شوند، به‌واقع تاثير محسوسي در سرعت برنامه نخواهد داشت. اما اين نكته بايد در ذهن باشد كه هر دستور زماني از وقت پردازنده را خواهد گرفت. اما چه زماني بايد در به‌كاربردن دستورات اضافه خودداري كنيم و چه زماني بايد عمدا آن را به‌كار ببريم و از وجود آنها چشم‌پوشي كنيم؟

كاهش دستورات زمان‌گير

همان‌طور كه گفتيم، دستوراتي كه قرار است در طول به‌كارگيري برنامه يك بار يا تعداد كمي اجرا شوند، تاثير چنداني در سرعت برنامه نخواهند گذاشت. آن دستوراتي در سرعت اجراي كل تاثير دارند كه يا خود دستورات زمان‌گيري باشند و يا قرار است به دفعات زيادي اجرا شوند.

فرض كنيد يك دستور انتساب ‌0‌=‌ a‌ در ابتداي يك برنامه وجود دارد كه قرار است تنها يك بار اجرا شود. يا حلقه‌اي وجود دارد كه يك آرايه 20تايي از اعداد صحيح را مقدار دهي اوليه مي‌كند و آن نيز يك بار اجرا مي‌شود. البته منظور از اجراي يك بار، دقيقا يك بار نيست. ممكن است چندين بار نيز اجرا شود. اما چون به فواصل زياد و به‌تعداد كم و محدود اجرا مي‌شود، از آن صرف‌نظر مي‌شود. در صورتي كه دستوري چنين خاصيتي داشته باشد، وجود آن به برنامه صدمه‌اي نخواهد زد. البته اگر واقعا زايد باشد، بهتر است كه حذف شود. اما اگر بي‌تاثير است و به خوانايي كد و درك بهتر برنامه كمك مي‌كند، بهتر است به‌حال خود رها شود و هيچ نگران كند شدن برنامه نيز نباشيم. ‌ ‌

اما يك دستور ممكن است خود ذاتا زمان‌گير باشد. مثلا دستور ‌(20)a = Hanoi‌ قرار است مساله برج ‌هانوي را براي 20 ديسك حل كند و در پايان، در صورت موفقيت، مقدار ‌true‌ و در صورت عدم موفقيت مقدار ‌false‌ را در ‌a‌ قرار دهد. البته اين دستور كمي اغراق‌آميز است و ممكن است به‌واقع دستوري به اين زمان‌گيري در برنامه‌هاي معمول كمتر رخ دهد. اما قصد ما اين است كه بگوييم يك دستور ممكن است يك انتساب ساده با زمان در حد ميكروثانيه يا نانوثانيه باشد و دستور ديگر كه خود موجب فراخواني يك تابع مي‌شود، ممكن است دقيقه‌ها يا ساعت‌ها به‌طول بيانجامد (مساله برج هانوي مساله‌اي است كه تعدادي ديسك به ترتيب كوچك به بزرگ قرار است با كمك يك ميله، از ميله‌اي به ميله‌اي ديگر انتقال يابد بدون آن كه در طول زمان بازي، ديسك بزرگ روي ديسك كوچك قرار گيرد. اين مساله كه به 1 - ‌ ‌2nحركت براي جابه‌جا كردن ‌n‌ ديسك نياز دارد، از مسائل قديمي و معروف است و با افزايش تعداد ديسك‌ها به ميزان چشمگيري افزايش زمان خواهيم داشت) تشخيص اين كه يك دستور چقدر زمان‌گير است و آيا بهتر است وجود داشته باشد يا حذف شود، به‌عهده برنامه‌نويس خواهد بود.

كاهش دستورات تكرار شونده

يك دستور، هر قدر هم كه ساده و كوچك باشد و سرعت اجراي آن بسيار زياد باشد، زماني كه به دفعات بسيار تكرار شود، سرعت برنامه را كم مي‌كند. بنابر اين بايد دقت شود كه تا حد امكان در به‌كار بردن دستورات تكرار شونده صرفه‌جويي كنيم. معمول‌ترين حالت تكرار دستورها چرخه‌هاي تكرار است. اما چرخه‌هاي تكرار تنها حالت براي تكرار دستورها نيست. به‌عبارت ديگر، اگر در چرخه‌هاي تكرار دقت كنيم، مي‌بينيم كه نمي‌توان مطمئن بود كه ديگر دستورات تكرار شونده‌اي وجود ندارد. با ذكر يك مثال، حالت ديگري از دستورات تكرار شونده را بيان خواهيم كرد:

در زبان‌هاي برنامه‌نويسي چند نوع چرخه تكرار وجود دارد. از جمله مي‌توان به‌ for‌، ‌while‌ و ‌repeat‌ اشاره كرد. هر كدام از اين چرخه‌ها به تعداد معين و يا تا برقراري شرط خاصي، دستورات داخل خود را تكرار مي‌كنند. حال اگر دستور اضافه‌اي در مجموعه دستورات داخل چرخه وجود داشته باشد، آن هم به‌همان تعداد تكرار خواهد شد. حذف دستورات اضافه و يا جايگزين كردن چند دستور با تعداد دستورات كمتر و سريع‌تر داخل چرخه‌ها مي‌تواند به‌نحوي چشمگير در سرعت اجراي برنامه تاثير بگذارد. البته اين كار بايد تا حدي انجام شود كه از قابليت برنامه كم نشده و در كار كرد آن تاثير نداشته باشد و همچنين آن را از حالت استانارد و قانونمندي خارج نكند.

در صورتي كه تصميم گرفتيد دستوري را از داخل يك چرخه تكرار حذف كنيد، اما مي‌دانيد كه آن دستور مي‌تواند به خوانايي برنامه كمك كند، مي‌توانيد طبق قوانين نحوي زبان با تبديل آن دستور به توضيحات يا كامنت ‌(Comment)‌‌از كامپايل شدن آن دستور جلوگيري كنيد و كاري كنيد كه كامپايلر با رسيدن به دستور مورد نظر، آن را ناديده بگيرد. با اين كار هم از خوانايي برنامه كم نمي‌شود و هم يك دستور از دستورات برنامه كم شده است.

البته توجه داشته باشيد كه اگر خواستيد يك دستور غلط را حذف كنيد، آن را نبايد كامنت كنيد. زيرا در دفعات بعد ممكن است شما را به اشتباه بيندازد. در اين حالت بهتر است به‌طور كامل آن دستور را پاك كنيد. تبديل كردن به كامنت تنها زماني توصيه مي‌شود كه اگر دستور را از حالت كامنت خارج كرديد، تغييري در منطق و كاركرد برنامه صورت نگيرد.

تكرار در رويدادها

رويدادها يا ‌Events‌ حالت ديگري از تكرار دستورات را موجب مي‌شود كه اين بار به تعداد خاص يا برقراري شرط صورت نمي‌گيرد. بلكه يك رويداد زماني فراخواني مي‌شود كه اتفاق خاصي در برنامه بيفتد. مثلا كليك كردن روي يك عنصر رويداد كليك آن عنصر را فراخواني مي‌كند يا بي‌كار شدن برنامه، رويداد ‌idle‌ يا بي‌كاري برنامه را فراخواني مي‌كند. رويدادهاي مختلفي در يك برنامه براي اجزاي گوناگون تعريف مي‌شوند كه هر يك از آنها با اختيار يا بدون اختيار كاربر مي‌توانند فراخواني شوند. بنابر اين گاهي ممكن است يك رويداد بدون خواست كاربر به‌دفعات زيادي فراخواني شود و در صورتي كه دستورات مربوط به آن زمانگير باشند، مي‌تواند باعث كندي برنامه و كاهش كارايي آن شوند. بنابر اين براي بهبود كاركرد يك برنامه بايد به رويدادهاي آن نيز توجه كافي داشت. ‌ ‌


اکنون ساعت 02:47 AM برپایه ساعت جهانی (GMT - گرینویچ) +3.5 می باشد.

Powered by vBulletin® Version 3.8.4 Copyright , Jelsoft Enterprices مدیریت توسط کورش نعلینی
استفاده از مطالب پی سی سیتی بدون ذکر منبع هم پیگرد قانونی ندارد!! (این دیگه به انصاف خودتونه !!)
(اگر مطلبی از شما در سایت ما بدون ذکر نامتان استفاده شده مارا خبر کنید تا آنرا اصلاح کنیم)