Problem: fazla bilgi, az cevap
Donanım izleme araçları çok sayıda sensör değeri gösteriyor ancak kullanıcı çoğu zaman “oyun neden yavaşladı?” sorusuna kısa bir cevap arıyor. Amacım sürekli ekranda duran yoğun grafikler yerine arka planda sakin çalışan ve yalnızca gerekli olduğunda öneri veren bir asistan oluşturmaktı.
Core ve App ayrımı
Çözümü iki projeye ayırdım. HardwareAssistant.Core sensör okuma, süreç denetimi ve darboğaz kurallarını içeriyor. HardwareAssistant.App ise WPF kontrol panelini, sistem tepsisi menüsünü ve oyun üstü overlay'i yönetiyor. Bu ayrım analiz motorunun arayüzden bağımsız test edilebilmesini sağlıyor.
Core projesi .NET 9 üzerinde LibreHardwareMonitor 0.9.6 ve PerformanceCounter kullanıyor. CPU/GPU yükü ve sıcaklığı, RAM baskısı ve en çok bellek kullanan süreçler ortak bir anlık görüntü modelinde toplanıyor.
Sensörleri güvenilir okumak
Her bilgisayar aynı sensör adlarını veya değerleri sunmuyor. Bu nedenle verileri isim, donanım türü ve SensorType üzerinden filtreliyorum. Geçersiz sıcaklık ve yük değerlerini eliyor, birden fazla aday olduğunda anlamlı olanı seçiyorum. Bazı anakart ve GPU sensörleri için yönetici yetkisi gerekebiliyor.
Polling aralığını 2,5 saniye tuttum. Daha sık okuma görsel olarak akıcı olabilir fakat bu aracın amacı benchmark yapmak değil, arka planda düşük maliyetle sorun yakalamak.
Darboğaz ve uyarı kuralları
Analiz motoru CPU darboğazı, yüksek sıcaklık, RAM baskısı ve GPU sınırı gibi durumları inceliyor. Aynı uyarının sürekli görünmesini engellemek için 45 saniyelik cooldown kullanıyorum. Sık karşılaşılan olaylarda bir LLM çağrısı yapmak yerine hazır Türkçe mesaj şablonları dönüyor; böylece araç çevrimdışı ve öngörülebilir çalışıyor.
Bir sensör değeri tek başına uyarı sebebi değil. Uyarı, kullanıcıya uygulanabilir bir öneri verebildiğinde gösteriliyor.
Oyun üstü WPF overlay
Overlay saydam, TopMost ve click-through bir WPF penceresi. Uyarı geldiğinde görünür oluyor, sekiz saniye sonra kapanıyor ve fare girişini oyundan çalmıyor. Ana pencere kapatılmak yerine sistem tepsisine indirilebiliyor; kullanıcı paneli tepsi menüsünden yeniden açabiliyor.
Paketleme ve antivirüs gerçeği
İlk dağıtımda tek dosya self-contained paket pratik görünüyordu. Ancak sıkıştırılmış ve kendini açan EXE yapıları bazı antivirüslerde yanlış pozitif üretebiliyor. Bu nedenle framework-dependent, sıkıştırılmamış ve kütüphaneleri yanında taşıyan temiz bir win-x64 paketi hazırladım.
Sonuç ve devamı
FPS ve yüzde 1 low alanları veri modelinde hazır; gerçek değerler için ileride RTSS veya PresentMon entegrasyonu gerekiyor. Bu projede öğrendiğim en önemli şey, masaüstü aracında yalnızca algoritmanın değil dağıtım biçiminin ve kullanıcı güveninin de ürün tasarımına dâhil olduğuydu.
BAŞA DÖNAtify'ın full-stack geliştirme süreci