<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Performance | The .NET Blog</title><link>https://thedotnetblog.com/tr/tags/performance/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>tr</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Tue, 26 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/tr/tags/performance/index.xml" rel="self" type="application/rss+xml"/><item><title>.NET 11 Sonunda Süreç API'sini Düzeltiyor</title><link>https://thedotnetblog.com/tr/news/emiliano-montesdeoca/dotnet-11-process-api-improvements-runandcapturetext/</link><pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/tr/news/emiliano-montesdeoca/dotnet-11-process-api-improvements-runandcapturetext/</guid><description>System.Diagnostics.Process yıllar içindeki en büyük güncellemesini alıyor. RunAndCaptureTextAsync, KillOnParentExit, SafeProcessHandle API'leri ve standart tanıtıcı yönlendirme üzerinde tam kontrol — artık deadlock kalıp kodu yok.</description><content:encoded>&lt;p&gt;Hiç bir süreç başlatıp çıktısını yakalamak zorunda kalan her .NET geliştiricisi, aynı tehlikeli kalıp kodun bir varyasyonunu yazmıştır: stdout&amp;rsquo;tan asenkron okuma, stderr&amp;rsquo;den asenkron okuma, &lt;code&gt;WaitForExitAsync&lt;/code&gt;, her iki akışı da boşaltmayı unutmayın yoksa deadlock olur. Bu yıllardır bilinen bir tuzaktır.&lt;/p&gt;
&lt;p&gt;.NET 11 bunu sonunda düzgün bir şekilde düzeltiyor.&lt;/p&gt;
&lt;h2 id="runandcapturetextasync"&gt;RunAndCaptureTextAsync&lt;/h2&gt;
&lt;p&gt;Temel eklenti: bir süreci başlatan, stdout ve stderr&amp;rsquo;i yakalayan ve deadlock olmaksızın çıkışı bekleyen tek bir statik metod.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAndCaptureTextAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;dotnet&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;--version&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StandardOutput&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Tek çağrı. Manuel akış boşaltma yok. Özenle yerleştirilmiş &lt;code&gt;WaitForExit&lt;/code&gt; yok. Sadece bir şey çalıştırmanız ve çıktısını almanız gerekiyorsa, istediğiniz API budur.&lt;/p&gt;
&lt;p&gt;Çıktıyı yakalamadan çıkışı beklemek istediğiniz durum için &lt;code&gt;Process.RunAsync&lt;/code&gt; da var.&lt;/p&gt;
&lt;h2 id="killonparentexit"&gt;KillOnParentExit&lt;/h2&gt;
&lt;p&gt;Başlatılan süreçlerle ilgili yaygın bir sorun: üst süreç çöküyor veya sonlandırılıyorsa, alt süreçler yetim olarak çalışmaya devam eder. &lt;code&gt;KillOnParentExit&lt;/code&gt;, süreç başlangıcında alt sürecin üst süreç çıktığında sonlandırılması gerektiğini bildirmenizi sağlar.&lt;/p&gt;
&lt;p&gt;Bu, platforma özgü şekillerde var olan bir özelliktir (Windows&amp;rsquo;ta iş nesneleri, Linux&amp;rsquo;ta prctl) ancak .NET&amp;rsquo;ten kullanmak için p/invoke veya üçüncü taraf kütüphaneler gerektiriyordu. Artık &lt;code&gt;ProcessStartInfo&lt;/code&gt; üzerinde birinci sınıf bir özellik haline geldi.&lt;/p&gt;
&lt;h2 id="safeprocesshandle-tabanlı-apiler"&gt;SafeProcessHandle Tabanlı API&amp;rsquo;ler&lt;/h2&gt;
&lt;p&gt;Yeni hafif API yüzeyi, tam &lt;code&gt;Process&lt;/code&gt; sınıfı yerine &lt;code&gt;SafeProcessHandle&lt;/code&gt; etrafında inşa edilmiştir. Tam &lt;code&gt;Process&lt;/code&gt; sınıfı çok fazla durum taşır ve kırpılması zordur — &lt;code&gt;SafeProcessHandle&lt;/code&gt; yolu, çıktı boyutunu en aza indirmesi gereken uygulamalar (WASM, yerel AOT) için daha kırpıcı dostu.&lt;/p&gt;
&lt;h2 id="tanıtıcı-kalıtımı-üzerinde-tam-kontrol"&gt;Tanıtıcı Kalıtımı Üzerinde Tam Kontrol&lt;/h2&gt;
&lt;p&gt;Güncellemede ayrıca bir alt sürecin hangi tanıtıcıları miras alacağı ve standart tanıtıcıların nasıl yönlendirileceği üzerinde ayrıntılı kontrol ekleniyor. Daha önce stdin/stdout/stderr&amp;rsquo;i yönlendirebiliyordunuz ancak OS düzeyinde tam olarak hangi tanıtıcıların miras alınacağını belirleyemiyordunuz. Yeni API&amp;rsquo;ler bu kontrolü açığa çıkarıyor.&lt;/p&gt;
&lt;h2 id="bu-neden-önemli"&gt;Bu Neden Önemli&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Process&lt;/code&gt; sınıfı araçlarda, derleme sistemlerinde, test koşucularında ve diğer yürütülebilir dosyaları çağıran her uygulamada kullanılıyor. Eski API yüzeyi .NET Framework döneminden kalmaydı ve yaşını gösteriyordu. Bu bir kırıcı değişiklik değil — eski API&amp;rsquo;ler hâlâ çalışıyor — ancak yeni kodların yeni yüzeyi tercih etmesi gerekiyor.&lt;/p&gt;
&lt;p&gt;Kırpılmış uygulamalar veya AOT derleme senaryoları için &lt;code&gt;SafeProcessHandle&lt;/code&gt; yolu özellikle memnuniyetle karşılanıyor. Eski &lt;code&gt;Process&lt;/code&gt; sınıfı, kırpmayı karmaşık hale getiren çok sayıda yansıma ağır kodu beraberinde getiriyordu.&lt;/p&gt;
&lt;p&gt;Orijinal gönderi: &lt;a href="https://devblogs.microsoft.com/dotnet/process-api-improvements-in-dotnet-11/"&gt;Process API Improvements in .NET 11&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Copilot Studio .NET 10 WebAssembly'ye Nasıl Geçti ve %20 Daha Hızlı Oldu</title><link>https://thedotnetblog.com/tr/news/emiliano-montesdeoca/copilot-studio-net10-webassembly-migration-performance/</link><pubDate>Sat, 23 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/tr/news/emiliano-montesdeoca/copilot-studio-net10-webassembly-migration-performance/</guid><description>.NET 10 WASM iyileştirmeleri sadece yeni projeler için değil. Copilot Studio'nun .NET 8'den yükseltme sonrası ölçtükleri: otomatik parmak izi, varsayılan WasmStripILAfterAOT ve gerçek yürütme performans sayıları.</description><content:encoded>&lt;p&gt;Copilot Studio ekibi, tüm Blazor WASM geliştiricilerinin merak ettiği şeyi yaptı: bir üretim uygulamasını gerçekten .NET 8&amp;rsquo;den .NET 10&amp;rsquo;a yükseltti ve sonuçları ölçtü. Gönderi, nadir ve gerçekten yararlı olan belirli sayılar paylaşıyor.&lt;/p&gt;
&lt;h2 id="yükseltme-sıkıcıydı-bu-iyi-bir-şey"&gt;Yükseltme Sıkıcıydı (Bu İyi Bir Şey)&lt;/h2&gt;
&lt;p&gt;Hedef çerçeveyi güncellemek, paket referanslarını yenilemek, son değişiklikleri düzeltmek. Hepsi bu. .NET 10 derlemesi artık üretimde çalışıyor. Geçişin kendisi ilginç kısım değildi — .NET 10&amp;rsquo;daki değişiklikler ilginç.&lt;/p&gt;
&lt;h2 id="otomatik-varlık-parmak-izi"&gt;Otomatik Varlık Parmak İzi&lt;/h2&gt;
&lt;p&gt;Önceden, bir WASM uygulaması dağıtmak, önbellek temizleme için yayınlanan varlıkları SHA256 karmaları ile yeniden adlandırmak üzere özel komut dosyaları yazmak anlamına geliyordu. Copilot Studio&amp;rsquo;nun tam olarak bunu yapan bir PowerShell betiği vardı — dosyaları yeniden adlandırma, JavaScript yükleyicisine &lt;code&gt;integrity&lt;/code&gt; özelliklerini enjekte etme, her şeyi manuel olarak yönetme.&lt;/p&gt;
&lt;p&gt;.NET 10&amp;rsquo;da tüm bunlar yerleşiktir. Yayınlanan varlıklar otomatik olarak parmak izi alınır, doğrudan &lt;code&gt;dotnet.js&lt;/code&gt;&amp;lsquo;den içe aktarılır ve manuel müdahale olmadan bütünlük doğrulaması yapılır. Ekip yeniden adlandırma betiğini sildi.&lt;/p&gt;
&lt;p&gt;Kapsamda küçük değişiklik, karmaşıklıkta önemli azalma.&lt;/p&gt;
&lt;h2 id="wasmstripilafteraot-artık-varsayılan-olarak-açık"&gt;WasmStripILAfterAOT Artık Varsayılan Olarak Açık&lt;/h2&gt;
&lt;p&gt;.NET 8&amp;rsquo;de, AOT derlenmiş derlemelerden IL kaldırmak isteğe bağlıydı. .NET 10&amp;rsquo;da bu varsayılan. AOT derlemesinden sonra, orijinal IL bayt kodu çıktıdan kaldırılır — çalışma zamanında gerekli değildir ve onu korumak paket boyutunu gereksiz yere şişiriyordu.&lt;/p&gt;
&lt;p&gt;Copilot Studio belirli bir optimizasyon kullanır: hem JIT motoru (hızlı başlangıç) hem de AOT motorunu (maksimum kararlı durum performansı) dağıtır, her ikisini paralel olarak yükler ve hazır olduğunda JIT&amp;rsquo;ten AOT&amp;rsquo;a geçiş yapar. Ayrıca iki motor arasında özdeş dosyaları tekilleştirir.&lt;/p&gt;
&lt;p&gt;Yeni IL sıyırma davranışı, AOT derlemelerinin artık JIT karşılıklarıyla bit bit eşleşmediği anlamına gelir, bu nedenle daha az dosya tekilleştirilir:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;.NET 8: 59 paylaşılan dosya&lt;/li&gt;
&lt;li&gt;.NET 10: 22 paylaşılan dosya&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Net sonuç: AOT motoru için yaklaşık %15 daha büyük paket boyutu. AOT indirme hızlı LAN&amp;rsquo;da ~%6 daha yavaş, 4G&amp;rsquo;de ~%17 daha yavaş. Ancak tüm bunlar uygulama zaten etkileşimli olduktan sonra arka planda gerçekleşir.&lt;/p&gt;
&lt;h2 id="performans-sayıları"&gt;Performans Sayıları&lt;/h2&gt;
&lt;p&gt;Önemli olan kısım bu:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;İlk çağrıda &lt;strong&gt;~%20 daha hızlı&lt;/strong&gt; (soğuk yol)&lt;/li&gt;
&lt;li&gt;Sonraki çağrılarda &lt;strong&gt;~%5 daha hızlı&lt;/strong&gt; (sıcak yol)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;İyileştirmeler, AOT derlenmiş kodun hakim olduğu büyük, karmaşık aracılarda — &amp;ldquo;büyük botlar&amp;quot;da en görünür. Daha basit iş akışları için kazanım daha küçüktür.&lt;/p&gt;
&lt;h2 id="hâlâ-net-8deyseniz"&gt;Hâlâ .NET 8&amp;rsquo;deyseniz&lt;/h2&gt;
&lt;p&gt;Geçiş hikayesi gerçekten basit: &lt;code&gt;&amp;lt;TargetFramework&amp;gt;&lt;/code&gt;&amp;lsquo;ü güncelleyin, paket referanslarını yenileyin, özel parmak izi komut dosyalarını kaldırın ve otomatik olarak &lt;code&gt;WasmStripILAfterAOT&lt;/code&gt;&amp;lsquo;tan yararlanacaksınız. AOT derliyorsanız, benzer performans kazanımları bekleyin.&lt;/p&gt;
&lt;p&gt;Gönderiden bir not: .NET WASM çalışma zamanını bir &lt;code&gt;WebWorker&lt;/code&gt; içinde yüklüyorsanız, başlatırken &lt;code&gt;dotnetSidecar = true&lt;/code&gt; ayarlayın.&lt;/p&gt;
&lt;p&gt;Orijinal gönderi: &lt;a href="https://devblogs.microsoft.com/dotnet/copilot-studio-dotnet-10-migration/"&gt;Copilot Studio gets faster with .NET 10 on WebAssembly&lt;/a&gt;&lt;/p&gt;</content:encoded></item></channel></rss>