A .NET keretrendszer delegate rendszerének tanulmányozása

OData támogatás
Konzulens:
Dr. Asztalos Márk
Automatizálási és Alkalmazott Informatikai Tanszék

A magas szintű programozási nyelvek az üzleti alkalmazásfejlesztés kedvelt eszközei, melyek a számítógép működésének alacsonyabb szintű részleteit fedik el a fejlesztő elől. Absztrakt nyelvi elemeket és fogalmakat használnak, mint például a változó, objektum, tömb vagy zár. A dolgozatomban a .NET keretrendszer belső működését vizsgálom.

A .NET keretrendszer az eseménykezelést publisher-subscriber jelzésrendszerrel valósítja meg, melynek eszközei a delegate-ek. Az eseménykezelést – így a delegate-eket is ¬– nagyon gyakran használjuk a szoftverfejlesztés során, hiszen minden üzleti alkalmazásnak, és felhasználói felületnek a szerves részét képezi. A nem megfelelő eseménykezelés viszont nehezen felderíthető hibákhoz vezethet, például memóriaszivárgáshoz, ha az objektumokat az életciklusuk végén a programozó nem iratkoztatja le az eseményről. Ilyen hibát könnyű véteni, hiszen az életciklust nehéz követni menedzselt környezetben. A hibalehetőséget és a fejlesztésbe befektetett energia mértékét jelentősen csökkentené egy mechanizmus, amely automatikusan elvégzi a leiratkoztatást, de ilyen mechanizmus egyelőre csak korlátozott körülmények között érhető el.

A szakdolgozatomban olyan könyvtárat dolgoztam ki, amely gyenge referenciák segítségével megakadályozza a memóriaszivárgást, bevezeti a gyenge delegate fogalmát, és az automatikus leiratkoztatást is elvégzi. Az én megoldásom nem igényli a publikáló fél felkészítését a gyenge eseménykezelésre, és általánosan működik minden eseménytípussal – az eddig létező könyvtárakkal ellentétben.

A tervezés során az IL kód elemzésével megvizsgálom a delegate-ek és néhány azokkal operáló beépített függvény működését. Készítek egy-egy implementációt a dynamic framework, a generikusság, és futásidejű kódemittálás felhasználásával is. Végül az implementációkat tesztekkel és mérésekkel összehasonlítom, majd egy példaalkalmazáson keresztül bemutatom a legjobb implementáció működését.

A célom az, hogy egy olyan könyvtárat készítsek, amely hatékonyan megoldja az eseménykezelés említett problémáját, és amelyet én magam is elégedetten használnék a későbbi fejlesztői munkám során.

Letölthető fájlok

A témához tartozó fájlokat csak bejelentkezett felhasználók tölthetik le.