Loop Performance
Coddy'nin C# Journey'sinin Mantık & Akış bölümünün bir parçası — ders 13 / 66.
Döngü performansını optimize etmek, özellikle büyük veri kümeleriyle çalışırken uygulamanızın hızını önemli ölçüde artırabilir.
Döngüden önce koleksiyon uzunluğunu bir değişkende saklayın:
int[] numbers = { 1, 2, 3, 4, 5 };
int length = numbers.Length; // Store length once
for (int i = 0; i < length; i++) // Use stored value
{
Console.WriteLine(numbers[i]);
}Döngü koşullarında tekrarlanan metot çağrılarından kaçının, örneğin:
for (int i = 0; i < GetCount(); i++)
{
// Loop body
}GetCount() metodu döngünün her yinelemesinde çağrılır. Bu, döngü 1000 kez çalışırsa GetCount()nin de 1000 kez çalıştırılacağı anlamına gelir, çünkü döngü koşulu her yinelemeden önce değerlendirilir.
Bunu doğru yapmak için işte:
int count = GetCount();
for (int i = 0; i < count; i++)
{
// Döngü gövdesi
}GetCount() döngü başlamadan önce sadece bir kez çağrılır ve değeri count değişkeninde saklanır. Sonra döngü tüm yinelemeler için bu saklanmış değeri kullanır, yöntemi tekrar tekrar çağırma ihtiyacını ortadan kaldırır.
Bu yaklaşım, gereksiz işlemleri azaltarak kodunuzun daha hızlı çalışmasını sağlayabilir, özellikle çağrılan metod karmaşık hesaplamalar veya veri erişimi gerçekleştiriyorsa.
Görev
KolayoptimizedSum adında bir metod oluşturun ki:
- Bir tamsayı dizisi parametre olarak alsın
- Tüm elemanların toplamını hesaplasın
- Hem optimize edilmiş hem de optimize edilmemiş bir yaklaşımı uygulasın:
- Optimize edilmemiş: Her döngü yinelemesinde array.Length çağırın
- Optimize edilmiş: Döngüden önce uzunluğu önbelleğe alın
- Optimize edilmiş yaklaşımdan sonucu döndürsün
Kopya kağıdı
Döngüden önce koleksiyon uzunluğunu bir değişkende saklayın, tekrarlanan özellik erişimini önlemek için:
int[] numbers = { 1, 2, 3, 4, 5 };
int length = numbers.Length; // Uzunluğu bir kez sakla
for (int i = 0; i < length; i++) // Depolanan değeri kullan
{
Console.WriteLine(numbers[i]);
}Sonucu önbelleğe alarak döngü koşullarındaki tekrarlanan metot çağrılarını önleyin:
// Verimsiz - her yinelemede metot çağrılır
for (int i = 0; i < GetCount(); i++)
{
// Döngü gövdesi
}
// Optimize edilmiş - metot bir kez çağrılır
int count = GetCount();
for (int i = 0; i < count; i++)
{
// Döngü gövdesi
}Kendin dene
public class OptimizedSum
{
// optimizedSum metodunu implement edin
public static int optimizedSum(int[] numbers)
{
// Kodu buraya yazın
}
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık & Akış bölümündeki tüm dersler
1Multi-dimensional Arrays
2D Arrays BasicsDeclaring and Initializing 2DAccessing 2D Array ElementsNested Loops with 2D ArraysJagged ArraysCommon Matrix OperationsRecap - Multi-dimensional4Flow Control Techniques
Early ReturnsGuard ClausesJump Statements (goto)Break and ContinueFlatten Nested Conditionals7Logical Operators Advanced
Short-Circuit EvaluationConditional Logical OperatorsOperator PrecedenceRecap - Advanced Operators2Advanced Decision Making
Multiple ConditionsComplex Boolean LogicIf vs. Switch ComparisonNested Switch StatementsRecap - Advanced Decisions5Exception Handling
Try-Catch BasicsException TypesMultiple Catch BlocksWorking with FilesFinally BlockUsing vs. Try-FinallyCustom ExceptionsRecap - Error Handling3Loop Enhancements
Loop PerformanceIterating ComplexEach Loop TypeRefactoring LoopsRecap - Optimized Loops6Null Handling
Null Reference BasicsNullable Value TypesNull Checking PatternsDefensive ProgrammingRecap - Null Safety