C++ ile Akıllı Bellek Yönetimi
Gerçek zamanlı görüntü işleme ve girdi otomasyonu motorlarında bellek sızıntıları kare süresini (frame time) bozar. C# ana mantık katmanı olsa bile capture veya hızlandırıcı modüller C++ ile yazılabilir; bu makale native taraftaki disiplini özetler.
RAII: Kaynağın yaşam döngüsü
Resource Acquisition Is Initialization (RAII), kaynağın (bellek, dosya, mutex) bir nesnenin ömrüne bağlanmasıdır. Görüntü tamponları için std::vector<uint8_t> veya özel FrameBuffer sınıfları RAII ile sarılmalıdır.
Akıllı işaretçiler
- std::unique_ptr — tek sahiplik; Agent bağlantı nesneleri.
- std::shared_ptr — paylaşılan önbellek; döngüsel referans riskine dikkat.
- std::weak_ptr — UI’nin arka plan işçisine güvenli gözlem.
Önbellek dostu veri yapıları
OpenCV Mat sürekli kopyalanmamalı; mümkünse referans ve ROI dilimleri kullanın. Sıcak döngülerde dinamik allocation’dan kaçınmak için object pool önceden ayrılmış tampon sağlar.
Çok iş parçacığı
Her iş parçacığı kendi scratch buffer’ına sahip olmalı. Global statik tamponlar veri yarışına yol açar. thread_local kısa ömürlü OCR sonuçları için uygundur.
C# ile birlikte çalışma
P/Invoke sınırında managed/unmanaged geçişi minimize edin. Büyük tamponları her karede marshal etmek yerine sabit pinlenmiş bellek veya shared memory segmenti kullanın.
Ölçüm ve profil
Visual Studio Diagnostic Tools, AddressSanitizer ve 24 saatlik stres testi bellek eğrisinin düz kaldığını doğrular. CI’da nightly leak testi önerilir.
İlgili: C# OpenCvSharp4 mimari