/
  • بهینه سازی حلقه ها

  • صفحه‌ها (2):
  • ارسال پاسخ   امتیاز موضوع:
    • 1 رأی - میانگین امیتازات: 5
    • 1
    • 2
    • 3
    • 4
    • 5

    حالت موضوعی | حالت خطی بهینه سازی حلقه ها
    نویسنده پیام
    میلاد آفلاین
    برنامه نویس
    ***

    ارسال‌ها: 181
    تاریخ عضویت: ۱۳۸۷ بهمن ۲۵
    اعتبار: 2
    تشکرها : 66
    ( 136 تشکر در 74 ارسال )
    ارسال: #1
    بهینه سازی حلقه ها
    سلام
    میخواستم پیشنهادات و تجربه های شما را در مورد بهینه سازی حلقه ها بدونم.
    مثلا پیشنهاد شما برای کاهش مصرف منابع در برنامه ای که شامل یک حلقه که ممکن هست چند هزار بار یک پروسه ای را تکرار کنه چی هست؟
    __________________________________________________________________________
    Two hands working can do more than a thousand clasped in prayer
    (آخرین ویرایش در این ارسال: ۱۳۸۸ تير ۱۷ ۰۷:۱۵ صبح، توسط میلاد.)
    ۱۳۸۸ تير ۱۷ ۰۷:۱۴ صبح
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    oia آفلاین
    محمد ثانی
    *****

    ارسال‌ها: 2,014
    تاریخ عضویت: ۱۳۸۷ آذر ۲۶
    اعتبار: 66
    تشکرها : 2330
    ( 2091 تشکر در 1290 ارسال )
    ارسال: #2
    RE: بهینه سازی حلقه ها
    فراخوانی توابع تویه PHP کنده...
    پ شاید بحتره توی حلقه نیفته
    ۱۳۸۸ تير ۱۷ ۰۹:۵۹ صبح
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    Y.P.Y آفلاین
    ناظم کل
    *******

    ارسال‌ها: 2,781
    تاریخ عضویت: ۱۳۸۷ دي ۲۸
    اعتبار: 103
    تشکرها : 2181
    ( 4856 تشکر در 2220 ارسال )
    ارسال: #3
    RE: بهینه سازی حلقه ها
    سلام،
    میلاد جان بهتر بود توضیحات بیشتری درباره قبل از حلقه و بعد از حلقه میدادید...
    مثلاً یکی از راهها استفاده از Reference یا همون & هستش.
    یکی دیگه از راهها نوع حلقه هستش. مثلاً foreach, while, do while...
    یکی دیگه از راهها تقسیم یک حلقه به چند حلقه هست! اینطوری از روند Still در یک حلقه هم جلوگیری میشه.
    __________________________________________________________________________
    وبلاگ: Yousha.Blog.ir

    صدام: "اگر با ارتش شاه ایران طرف بودیم، یک ماهه جنگ را می بردیم"
    http://gulfnews.com/opinion/thinkers/ira...i-1.500997
    ۱۳۸۸ تير ۱۷ ۱۱:۳۵ صبح
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : Alimokhlesi molana oia
    oia آفلاین
    محمد ثانی
    *****

    ارسال‌ها: 2,014
    تاریخ عضویت: ۱۳۸۷ آذر ۲۶
    اعتبار: 66
    تشکرها : 2330
    ( 2091 تشکر در 1290 ارسال )
    ارسال: #4
    RE: بهینه سازی حلقه ها
    من شنیدم که for بهتر از while در کدهای معمول، صحت داره؟
    ۱۳۸۸ تير ۱۷ ۰۴:۵۹ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    Y.P.Y آفلاین
    ناظم کل
    *******

    ارسال‌ها: 2,781
    تاریخ عضویت: ۱۳۸۷ دي ۲۸
    اعتبار: 103
    تشکرها : 2181
    ( 4856 تشکر در 2220 ارسال )
    ارسال: #5
    RE: بهینه سازی حلقه ها
    نقل قول: من شنیدم که for بهتر از while در کدهای معمول، صحت داره؟
    اینجوری نمیشه قضاوت کرد. باید در یک عملیات خودت تست کنی، هر کدوم جای خودش.
    ولی معمولاً برای ایجاد حلقه 2 انتخاب میشه داشت: for/foreach ----- while/do while...
    __________________________________________________________________________
    وبلاگ: Yousha.Blog.ir

    صدام: "اگر با ارتش شاه ایران طرف بودیم، یک ماهه جنگ را می بردیم"
    http://gulfnews.com/opinion/thinkers/ira...i-1.500997
    ۱۳۸۸ تير ۱۷ ۰۵:۵۱ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : oia
    میلاد آفلاین
    برنامه نویس
    ***

    ارسال‌ها: 181
    تاریخ عضویت: ۱۳۸۷ بهمن ۲۵
    اعتبار: 2
    تشکرها : 66
    ( 136 تشکر در 74 ارسال )
    ارسال: #6
    RE: بهینه سازی حلقه ها
    سلام
    به عنوان مثال من یک تابع دارم که یک عملیاتی را انجام میده و موقع اجرا حدودا ۵۰۰ کیلوبایت از رم را مصرف میکنه، وقتی من اون را داخل یک حلقه قرار میدم به ازای هر بار اجرا شدن ۵۰۰ کیلوبایت به خودش اختصاص میده تا زمانی که کل حلقه اجرا بشه و پایان اسکریپت مثلا اگر این حلقه ۱۰ بار تکرار بشه چیزی حدود ۵ مگابایت رم مصرف میکنه که اگر اینو در مقیاس بالا در نظر بگیریم اصلا قابل قبول نیست.
    کاری که من کردم این بود که برای هر بار اجرای حلقه اسکریپت را با ریدایرکت کردن رفرش کردم اینجوری مشکل حل میشه اما میخواستم راه حل های دیگه را بدونم و تجربیات و پیشنهادات شما را.
    __________________________________________________________________________
    Two hands working can do more than a thousand clasped in prayer
    ۱۳۸۸ تير ۱۷ ۰۹:۰۹ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    admin آفلاین
    وحید سهرابلو
    **********

    ارسال‌ها: 5,697
    تاریخ عضویت: ۱۳۸۷ آذر ۲۴
    اعتبار: 100
    تشکرها : 1362
    ( 6197 تشکر در 3438 ارسال )
    ارسال: #7
    RE: بهینه سازی حلقه ها
    چرا از fork یکی از قابلیتهای نهفته php استفاده نمی کنی؟
    ۱۳۸۸ تير ۱۸ ۰۹:۴۴ صبح
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    zoghal آفلاین
    صالح سوزنچی
    *****

    ارسال‌ها: 1,766
    تاریخ عضویت: ۱۳۸۷ دي ۲۵
    اعتبار: 23
    تشکرها : 1500
    ( 1729 تشکر در 992 ارسال )
    ارسال: #8
    RE: بهینه سازی حلقه ها
    توضیح بیشتری میدید؟
    ۱۳۸۸ تير ۱۸ ۰۶:۵۲ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    admin آفلاین
    وحید سهرابلو
    **********

    ارسال‌ها: 5,697
    تاریخ عضویت: ۱۳۸۷ آذر ۲۴
    اعتبار: 100
    تشکرها : 1362
    ( 6197 تشکر در 3438 ارسال )
    ارسال: #9
    RE: بهینه سازی حلقه ها
    یک مثال داشتم که با php برای یوتیوب بود . یادم نمیاد از کجا برداشته بودم
    تحت cli هم اجرا میشه
    مثالی خوبی برای استفاده از fork جهت تسریع انجام اسکریپت هست
    کد PHP:
    <?php

    ini_set
    ('memory_limit''1024M');
    if(!(
    $argv[1] && $argv[2]))
      die(
    "Usage: php youtube-user.php <username> <pattern>\n");

    $user $argv[1];
    $pattern $argv[2];

    echo 
    "Attempting to download all videos by user $user matching the pattern '$pattern'\n";

    $file file_get_contents('http://www.youtube.com/profile?user='.$user);
    preg_match_all('!(watch\?v=[A-Za-z0-9]{11}).*?'.$pattern.'!'$file$matchesPREG_PATTERN_ORDER);
    $titles array_unique($matches[1]);

    $pids = array();

    foreach(
    $titles as $title)
    {
      
    $pid pcntl_fork();
      
      if(
    $pid == -1) {
        die(
    'could not fork');
      } else if (
    $pid) {
        
    // we are in the parent
        
    $pids[] = $pid;
      } else {
        
    // we're in the child - download the movie

        
    $page file_get_contents('http://www.youtube.com/'.$title);
        
    preg_match('!<title>(.*?)</title>!'$page$matches);
        echo 
    'Downloading '.$matches[1]."\n";

        
    preg_match('!video_id=.*&t=[^\"&]*!'$page$matches);
        
    $video 'http://youtube.com/get_video?'.$matches[0];

        
    $video_file file_get_contents($video);
        
    $parts explode('='$title);
        
    file_put_contents($parts[1].'.flv'$video_file);
        exit();
      }
    }

    foreach(
    $pids as $pid) {
      
    pcntl_waitpid($pid$status);


    البته وقتی که درس برنامه نویسی همروند رو خوندم به این فکر افتادم که آیا php هم می تونه به عنوان یک زبان برنامه نویسی همروند استفاده بشه یا خیر که به این موضوع برخوردم
    ۱۳۸۸ تير ۱۹ ۰۵:۰۱ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : Y.P.Y میلاد
    Y.P.Y آفلاین
    ناظم کل
    *******

    ارسال‌ها: 2,781
    تاریخ عضویت: ۱۳۸۷ دي ۲۸
    اعتبار: 103
    تشکرها : 2181
    ( 4856 تشکر در 2220 ارسال )
    ارسال: #10
    RE: بهینه سازی حلقه ها
    کد:
    ini_set('memory_limit', '1024M');
    یا Jesus Exclamation
    وحید جان فکر نمیکنی این بیشتر فضارو باز کرده و کنترول میکنه تا کم کردن فشار یا بهینه سازی روش/انجام عملیات؟
    کد:
    foreach($titles as $title)
    {
      $pid = pcntl_fork();
    ######################################
    foreach($pids as $pid) {
      pcntl_waitpid($pid, $status);
    }
    __________________________________________________________________________
    وبلاگ: Yousha.Blog.ir

    صدام: "اگر با ارتش شاه ایران طرف بودیم، یک ماهه جنگ را می بردیم"
    http://gulfnews.com/opinion/thinkers/ira...i-1.500997
    ۱۳۸۸ تير ۱۹ ۰۵:۳۸ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    « قدیمی تر | تازه‌ تر »

  • صفحه‌ها (2):
  • ارسال پاسخ
    پرش به انجمن:


    کاربرانِ درحال بازدید از این موضوع: 1 مهمان
    IranPHP.org | تماس با ما | بازگشت به بالا | بازگشت به محتوا | بایگانی | پیوند سایتی RSS