Skip to content

kamil2333/Benchmark

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 

Repository files navigation

Benchmark przetwarzania obrazu i konwolucji w C#

Opis projektu

Projekt to narzędzie benchmarkingowe (test wydajnościowy) napisane w języku C#, służące do analizy porównawczej algorytmów przetwarzania obrazu. Głównym celem aplikacji jest zademonstrowanie różnic w szybkości działania oraz zarządzaniu pamięcią pomiędzy dwoma skrajnymi podejściami do manipulacji pikselami w środowisku .NET:

  1. Nienadzorowanym (Unsafe) – niskopoziomowym, wykorzystującym wskaźniki.
  2. Nadzorowanym (Managed) – bezpiecznym, operującym na strukturach zarządzanych.

Program aplikuje filtry konwolucyjne (splotu) o wielkości macierzy 5x5 na wczytany plik graficzny (w formatach 24bpp i 32bpp), precyzyjnie mierzy czas wykonania operacji oraz pozwala zbadać, jak mechanizm oczyszczania pamięci (Garbage Collector) wpływa na ogólną wydajność CPU.


Główne cechy i funkcjonalności

  • Porównanie dwóch paradygmatów pamięci:
    • Direct Access (Unsafe Mode): Wykorzystuje blokowanie pamięci bitmapy w pamięci RAM za pomocą LockBits oraz bezpośredni dostęp do bajtów przez wskaźniki (byte*). Ta metoda omija narzut sprawdzania granic tablic i jest dodatkowo zoptymalizowana wielowątkowo przy użyciu System.Threading.Tasks.Parallel.For.
    • Managed 2D Array Mode: Kopiuje całą zawartość obrazu do dwuwymiarowej tablicy zarządzanej byte[,] za pomocą Marshal.Copy i Buffer.BlockCopy. Wykonuje operacje w sposób bezpieczny dla środowiska uruchomieniowego, lecz wiąże się to z większą alokacją pamięci i niższa wydajnością.
  • Wbudowana biblioteka filtrów 5x5 (Convolution Kernels):
    • GaussianBlur5x5 – Rozmycie Gaussa (filtr domyślny)
    • BoxBlur5x5 – Proste rozmycie pudełkowe
    • Sharpen5x5 – Wyostrzanie krawędzi i detali
    • Laplacian5x5 – Detekcja krawędzi (operator Laplace'a)
    • Identity5x5 – Filtr neutralny (kopia 1:1)
  • Automatyczna normalizacja filtrów: Algorytm samoczynnie sprawdza i przelicza wagi macierzy, zapewniając, że ich suma wynosi 1. Zapobiega to niezamierzonemu rozjaśnieniu lub ściemnieniu obrazu wynikowego.
  • Testowanie wpływu Garbage Collectora: Aplikacja oferuje opcję wymuszenia pełnej kolekcji GC (GC.Collect() oraz GC.WaitForPendingFinalizers) bezpośrednio przed pomiarem, co pozwala sprawdzić realny wpływ zarządzania pamięcią na wydajność.
  • Zapis wyników: Przetworzone obrazy są automatycznie zapisywane w dedykowanym folderze obrazy_wynikowe na Pulpicie użytkownika z unikalną nazwą określającą metodę, filtr i status GC.

Wymagania i konfiguracja

Przed uruchomieniem projektu należy upewnić się, że spełnione są poniższe warunki:

1. Włączona opcja Unsafe Code

Ponieważ metoda bezpośrednia używa wskaźników, w pliku projektu (.csproj) lub we właściwościach projektu w Visual Studio należy zaznaczyć opcję Allow unsafe code:

<AllowUnsafeBlocks>true</AllowUnsafeBlocks>

About

Benchmark przetwarzania obrazu i konwolucji w C#

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages