بهینه‌سازی برنامه
بهینه‌سازی خودکار و دستی

همچنین نگاه کنید به رده: بهینه‌سازی کامپایلر
بهینه‌سازی می‌تواند توسط کامپایلرها یا توسط برنامه نویسان انجام شود. دستاوردها معمولاً برای بهینه‌سازی محلی محدود می‌شوند و برای بهینه‌سازی جهانی بزرگتر است. به‌طور معمول، قوی‌ترین بهینه‌سازی، یافتن یک الگوریتم برتر الگوریتم است.
بهینه‌سازی یک سیستم کلی معمولاً توسط برنامه نویسان انجام می‌شود، زیرا برای بهینه سازان خودکار بسیار پیچیده است. در این وضعیت، برنامه نویسان یا مدیران سیستم به صراحت کد را تغییر می‌دهند تا سیستم کلی بهتر عمل کند. اگر چه می‌تواند کارایی بهتر را تولید کند، اما به مراتب گرانتر از بهینه‌سازی خودکار است. از آنجایی که پارامترهای بسیاری بر عملکرد برنامه تأثیر می‌گذارند، فضای بهینه‌سازی برنامه بزرگ است. فراشناخت و یادگیری ماشین برای رفع پیچیدگی بهینه‌سازی برنامه استفاده می‌شود.
از بخش پروفایل (یا آنالیز کننده عملکرد) برای پیدا کردن بخش‌هایی از برنامه استفاده می‌کنید که بیشترین منابع را می‌گیرند - تنگنا گاهی اوقات برنامه‌نویسان معتقدند که ایده ای روشن از جایی که تنگنا است، اما شهود اغلب اشتباه است. [نیازمند منبع] بهینه‌سازی قطعه ای غیر مهم از کد به‌طور معمول برای انجام کار کلی کمک نمی‌کند.
هنگامی که تنگنا محلی سازی می‌شود، بهینه‌سازی معمولاً با بازخوانی الگوریتم مورد استفاده در برنامه آغاز می‌شود. اغلب اوقات الگوریتم خاصی می‌تواند به‌طور خاص برای یک مشکل خاص طراحی شده و کارایی بهتر از یک الگوریتم ژنریک را فراهم کند. برای مثال، کار مرتب‌سازی لیست عظیمی از اقلام معمولاً با یک روش مرتب‌سازی سریع انجام می‌شود که یکی از کارآمدترین الگوریتم‌های عمومی است. اما اگر برخی از ویژگی‌های مورد استفاده قابل بهره‌برداری باشد (به عنوان مثال، آن‌ها قبلاً در یک نظم خاص مرتب شده‌اند)، روش دیگری می‌تواند مورد استفاده قرار گیرد یا حتی یک مرتب‌سازی مرتب‌سازی سفارشی.
پس از اینکه برنامه‌نویس متوجه شد که بهترین الگوریتم انتخاب شده است، بهینه‌سازی کد می‌تواند شروع شود. حلقه‌ها می‌توانند به صورت غیرمجاز (برای سربار حلقه پایین‌تر، اگر چه اغلب می‌تواند به سرعت پایین‌تر در صورتی که بیش از حد حافظه نهان سی‌پی‌یو)، نوع داده‌ها به عنوان کوچک ممکن است می‌تواند استفاده شود، ریاضی عدد صحیح می‌تواند به جای نقطه شناور استفاده شود، و غیره. (نگاه کنید به مقاله کارایی الگوریتمی برای این و سایر تکنیک‌ها)
تنگناهای عملکرد می‌تواند به دلیل محدودیت‌های زبان به جای الگوریتم‌ها یا ساختارهای داده مورد استفاده در برنامه باشد. گاهی اوقات یک بخش مهم از برنامه را می‌توان دوباره در یک زبان برنامه‌نویسی متفاوت نوشت که دسترسی مستقیم به دستگاه پایه را فراهم می‌کند. برای مثال، برای زبان‌های بسیار سطح مانند پایتون معمول است که ماژول‌هایی که در C نوشته شده‌اند برای سرعت بیشتر باشد. برنامه‌هایی که قبلاً در C نوشته شده‌اند می‌توانند ماژول‌هایی را که در مجمع نوشته شده‌اند داشته باشند. برنامه‌های نوشته شده در دی می‌توانند از مونتاژ خطی استفاده کنند.
بخش‌های بازنویسی "پرداخت می‌شود" در این شرایط به دلیل یک قاعده کلی "شناخته شده به عنوان قانون ۹۰/۱۰، که می‌گوید ۹۰ درصد از زمان در ۱۰٪ از کد صرف، و تنها ۱۰٪ از زمان در ۹۰٪ باقی مانده از کد؛ بنابراین، تلاش فکری برای بهینه‌سازی فقط بخش کوچکی از برنامه می‌تواند تأثیر بزرگی بر سرعت کلی داشته باشد - اگر قسمت درست(ها) قابل نصب باشد.
بهینه‌سازی دستی گاهی اوقات عواقبی ناشی از خواندن را مختل می‌کند؛ بنابراین بهینه‌سازی کد باید با دقت مستندسازی شود (ترجیحا با استفاده از نظرات درون خطی)، و تأثیر آنها بر پیشرفت آینده مورد ارزیابی قرار می‌گیرد.
برنامه ای که بهینه‌سازی خودکار را انجام می‌دهد بهینه‌سازی شده است. اکثر بهینه‌سازها در کامپایلرها جاسازی شده و در طول تدوین کار می‌کنند. بهینه سازان اغلب می‌توانند کد تولید شده را به پردازنده‌های خاصی متصل کنند.
امروزه بهینه‌سازی خودکار تقریباً به‌طور انحصاری به بهینه‌سازی کامپایلر محدود می شود. با این حال، به دلیل اینکه بهینه‌سازی کامپایلر معمولاً به یک مجموعه ثابت و بهینه‌سازی به‌طور کلی محدود می‌شود، تقاضای قابل توجهی برای بهینه سازان وجود دارد که می‌توانند توصیف‌های مربوط به بهینه‌سازی‌های مربوط به مشکل و زبان را بپذیرند و به مهندس اجازه می‌دهد تا بهینه‌سازی‌های سفارشی را مشخص کنند. ابزارهایی که توصیف‌های بهینه‌سازی را می‌پذیرند، سیستم‌های تبدیل سیستم نامیده می‌شوند و شروع به استفاده از سیستم‌های واقعی نرم‌افزار مانند C ++ می‌شوند.
برخی از زبان‌های سطح بالا (ایفل، استرل) برنامه‌های خود را با استفاده از زبان متوسط بهینه‌سازی می‌کنند.
محاسبات گرید یا محاسبات توزیع شده به منظور بهینه‌سازی کل سیستم، با حرکت دادن وظایف از رایانه‌های با استفاده بالا به رایانه‌ها با زمان بیکاری است.