CodeBlanks Logo Icon CodeBlanks

Proje tasarımı

C# kursu · Uzman · Ders 43/47

Uzman finali mini uygulamasının iskeletini tasarlarsın.

Proje tasarımı

Bu projede paralel bir log işleyici yapacaksın: Span<T> ile kopyasız seviye ayrıştırma, Channel ile üretici-tüketici akışı, bir source generator simülasyonu ile DTO üretimi ve Parallel.ForEach ile çoklu iş parçacıklı sayım.

Tüm parçalar tek bir static class LogProcessor içinde toplanır. Her ders bir parça ekler; başlangıç kodu bir önceki dersin çözümunu içerir. Son derste her şey birleşir.

LogProcessor iskeleti

İskelet, ParseLevel ve CountByLevel adlı iki metot içerir. ParseLevel, bir seviye adını (INFO, WARN, ERROR) tam sayı koda çevirir. CountByLevel bir log dizisinde belirli bir seviyeden kaç tane olduğunu sayar.

Bu temel, sonraki derslerde Span, Channel ve source generator ile genişletilecek. Her parça bir öncekinin üzerine inşa edilir.

Uygulama LogProcessor iskeletini yaz

LogProcessor statik sınıfına iki metot ekle. public static int ParseLevel(string level): switch ile "INFO" => 0, "WARN" => 1, "ERROR" => 2, _ => -1. public static int CountByLevel(string[] logs, int targetLevel): foreach ile her logun seviyesini ParseLevel(log.Split(':')[0]) ile bul ve say. Main'de logs dizisini { "INFO: a", "WARN: b", "INFO: c", "ERROR: d" } olarak tanımla ve CountByLevel(logs, 0)'ı yazdır.

Örnek çözümü göster
a", "WARN: b", "INFO: c", "ERROR: d" }; Console.WriteLine(LogProcessor.CountByLevel(logs, 0));
Örnek çözüm:
using System;

static class LogProcessor
{
    public static int ParseLevel(string level)
    {
        return level switch
        {
            "INFO" => 0,
            "WARN" => 1,
            "ERROR" => 2,
            _ => -1
        };
    }

    public static int CountByLevel(string[] logs, int targetLevel)
    {
        int count = 0;
        foreach (var log in logs)
        {
            if (ParseLevel(log.Split(':')[0]) == targetLevel)
            {
                count++;
            }
        }
        return count;
    }
}

class Program
{
    static void Main()
    {
        Console.WriteLine("LogProcessor iskeleti hazır");
        var logs = new[] { "INFO: a", "WARN: b", "INFO: c", "ERROR: d" };
        Console.WriteLine(LogProcessor.CountByLevel(logs, 0));
    }
}

Kendini test et

  1. Bu projede logları paralel işlemek için hangi bileşen kullanılır?

    • Channel (üretici-tüketici)
    • ArrayList
    • DataTable
    • StringBuilder
    Cevabı göster

    Channel (üretici-tüketici) — Doğru. Channel üretici-tüketici akışı için kullanılır.

  2. ParseLevel bildirimini tamamla

    public static int ____(string level)
    Cevabı göster
    public static int ParseLevel(string level)
  3. Proje bileşenlerini eşleştir

    Span<T>
    Düşük kopyalı bellek görünümü
    Channel<T>
    Üretici-tüketici kanalı
    unsafe
    İşaretçi ile düşük seviye erişim

Uzman bölümündeki tüm dersler