Proje tasarımı
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
-
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.
-
ParseLevel bildirimini tamamla
public static int ____(string level)Cevabı göster
public static int ParseLevel(string level) -
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