Mert Özen Her Satırda Daha İleri

Blog

Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.

Seriler
101 yazı bulundu #csharp
C# Async Programlama Neden Var: Bloklamak, I/O ve Ölçek
Backend SERİ 01

C# Async Programlama Neden Var: Bloklamak, I/O ve Ölçek

Aynı 100 stok sorgusu async ile bir saniyede, thread'i bekleten kodla 8-9 saniyede bitiyor. I/O-bound ve CPU-bound iş farkı, bloklamanın UI'da ve sunucuda bedeli, thread pool starvation, async'in hız değil kapasite kazandırması ve sahte async tuzağı.

7 Kas 2026 9 dk 5
LINQ ve .NET 10: LeftJoin, RightJoin, Shuffle, Sequence ve Async LINQ
Backend SERİ 17

LINQ ve .NET 10: LeftJoin, RightJoin, Shuffle, Sequence ve Async LINQ

.NET 10'da LINQ: GroupJoin ve DefaultIfEmpty pattern'ının yerini alan LeftJoin ve RightJoin, deferred çalışan Shuffle, generic math üzerine kurulu Sequence ve InfiniteSequence, BCL'e giren System.Linq.AsyncEnumerable ve System.Linq.Async paketiyle yaşanan CS0121 çakışması; .NET 11'de gelecek FullJoin'e kısa bakış.

7 Kas 2026 10 dk 4
LINQ ve .NET 9: CountBy, AggregateBy ve Index
Backend SERİ 16

LINQ ve .NET 9: CountBy, AggregateBy ve Index

.NET 9'da LINQ: dictionary değil sequence döndüren CountBy, key bazında biriktiren AggregateBy ve GroupBy'a göre bellek farkının BenchmarkDotNet ölçümü, Select((x, i) => ...) yerine Index(), Queryable karşılıkları ve mutable seed tuzağı.

7 Kas 2026 11 dk 2
LINQ ve .NET 7–8: Order, Selector'süz ToDictionary ve Performans
Backend SERİ 15

LINQ ve .NET 7–8: Order, Selector'süz ToDictionary ve Performans

.NET 7'nin key selector istemeyen Order ve OrderDescending operatörleri, IComparable eksikliğinin ancak runtime'da patlaması, kültüre duyarlı ve ordinal string sıralama, .NET 8'in selector'süz ToDictionary'si ve BenchmarkDotNet ile ölçülen vectorize edilmiş Max/Sum ile Order ve OrderBy(x => x) farkı.

7 Kas 2026 10 dk 3
Gerçek Veriyle LINQ: JSON Dosyasından Okunan Siparişlerle Senaryolar
Backend SERİ 14

Gerçek Veriyle LINQ: JSON Dosyasından Okunan Siparişlerle Senaryolar

System.Text.Json ile dosyadan okunan siparişler üzerinde LINQ: büyük-küçük harf tuzağı ve JsonSerializerDefaults.Web, veriyi doğrulamak (tekrar eden, müşterisi olmayan, hatalı adetli kayıtlar), aylık ciro, en çok satanlar, GroupJoin ile müşteri raporu, JSON'a geri yazmak ve DeserializeAsyncEnumerable ile stream ederek okumak.

7 Kas 2026 12 dk 2
LINQ Performansı: Çoklu Enumeration, Materialize ve BenchmarkDotNet ile Ölçmek
Backend SERİ 13

LINQ Performansı: Çoklu Enumeration, Materialize ve BenchmarkDotNet ile Ölçmek

Aynı sorgunun farkında olmadan kaç kez çalıştığı, ToList'in ne zaman kurtarıp ne zaman zarar verdiği, Count() > 0 yerine Any() ve TryGetNonEnumeratedCount; BenchmarkDotNet 0.15.8 ile döngü içindeki Where'in lookup'a göre 50 kat yavaşlığını ve gürültülü bir makinede döngü ile LINQ karşılaştırmasını gerçek sayılarla ölçmek.

7 Kas 2026 13 dk 2
LINQ'te Kendi Operatörünü Yazmak: Extension Method ve yield return
Backend SERİ 12

LINQ'te Kendi Operatörünü Yazmak: Extension Method ve yield return

LINQ operatörünün aslında bir extension method olduğu; yield return ile lazy ve streaming operatör yazmak, argüman doğrulamasını iterator'den ayırmak, immediate operatörler, erken bırakılan enumeration'da finally, IQueryable için Expression alan operatör ve BCL ile isim çakışması.

7 Kas 2026 13 dk 3
LINQ Any, All, Contains, SequenceEqual ve Dönüşüm Operatörleri
Backend SERİ 11

LINQ Any, All, Contains, SequenceEqual ve Dönüşüm Operatörleri

All'ın boş sequence'te neden true döndüğü ve doğrulamada Any ile birlikte kullanmak, Any'nin ilk element'te durması ve Count() > 0 farkı, Contains ve record eşitliği, SequenceEqual ve collection taşıyan record tuzağı, ToList/ToArray/ToHashSet ile snapshot, ToDictionary'de tekrar eden key ve Cast ile OfType farkı.

7 Kas 2026 10 dk 3
LINQ Join ve GroupJoin: Inner Join, Composite Key ve Left Join Pattern'ı
Backend SERİ 10

LINQ Join ve GroupJoin: Inner Join, Composite Key ve Left Join Pattern'ı

Join'in inner join olarak eşleşmeyeni düşürüp çoklu eşleşmeyi çoğaltması ve dokümante edilen sırası. Query syntax'ta equals'ın yönü ve CS1937/CS1938, composite key ve CS1941, GroupJoin ile hiyerarşik sonuç, GroupJoin + DefaultIfEmpty ile left join pattern'ı ve null tuzağı, çoklu join ve Join'in lookup ile n + m'de çalışması.

7 Kas 2026 11 dk 6
LINQ Set İşlemleri: Distinct, Union, Intersect, Except ve DistinctBy
Backend SERİ 09

LINQ Set İşlemleri: Distinct, Union, Intersect, Except ve DistinctBy

Distinct'in eşitliği nereden aldığı ve eşitliği olmayan class'ta neden hiçbir şey silmediği. Union, Intersect ve Except'in sonucu tekilleştirmesi, Concat ve Where ile farkları, dokümante edilen sıra, comparer ile karşılaştırma, .NET 6 DistinctBy/UnionBy ve key listesi alan IntersectBy/ExceptBy, CS0411 hatası, HashSet ve deferred execution.

7 Kas 2026 9 dk 5
LINQ Gruplama: GroupBy, IGrouping ve ToLookup
Backend SERİ 08

LINQ Gruplama: GroupBy, IGrouping ve ToLookup

GroupBy'ın deferred, ToLookup'ın immediate çalışması ve bunun sonuca etkisi. IGrouping'in key ve element'leri, dokümante edilmiş grup sırası, gruplayıp özetlemek, element ve result selector overload'ları, query syntax'ta group by into, composite key'ler, ToLookup'ın olmayan key davranışı, comparer ile gruplama ve GroupBy'ın kaynağı buffer'laması.

7 Kas 2026 10 dk 3
LINQ Aggregation Operatörleri: Count, Sum, Average, Min, Max, Aggregate ve MinBy/MaxBy
Backend SERİ 07

LINQ Aggregation Operatörleri: Count, Sum, Average, Min, Max, Aggregate ve MinBy/MaxBy

Boş sequence'te Sum neden 0, Max neden exception döner ve nullable selector ile DefaultIfEmpty çözümleri. Count ile .NET 6 TryGetNonEnumeratedCount, Average'ın dönüş tipi, Sum'ın checked overflow'u, değer yerine element döndüren MinBy/MaxBy, Aggregate'in üç overload'u ve aynı sorguyu kaç kez enumerate ettiğin.

7 Kas 2026 11 dk 4
Blog Haritası