Archive for category Optimalizáció
C# Tech. interjú – Algoritmus javítása
Posted by Tóth Viktor in .NET, Interjú, Minifeladat, Optimalizáció on 2013. április 19.
Az előző részben átírtuk a tesztfeladat adatbázisát hierarchikus szerkezetűre – ez azonban újabb file-ok feldolgozási igényét hozta magával. Ennyi adattal az alkalmazásban használt algoritmus már nehezen boldogul. Erről a kódról van szó: Ha ránézünk a kódra azonnal látszik az egymásba ágyazott ciklus, mind a kettő a persons listán halad végig. Így ez egy négyzetes algoritmus […]
C# Tech. interjú – nem-rekurzív könyvtárbejárás
Posted by Tóth Viktor in .NET, Interjú, Minifeladat, Optimalizáció on 2013. április 18.
Korábban adtunk egy rekurzív megvalósítást a könyvtárbejárás problémájára. Az a megoldás rendben van, azonban felvetettünk egy elvi problémát: mi van akkor, ha valamilyen oknál fogva az algoritmust szakaszosan kell végrehajtani. Az önmagát hívó metódusokkal az a baj, hogy az algoritmus munkaállapota a hívási vermen van szétterítve metódus paraméterek és lokális változók formájában. Emiatt nem megy […]
Megoldás – Minifeladatok III.
Posted by Tóth Viktor in .NET, Minifeladat, Optimalizáció on 2012. március 22.
A III-as számú minifeladat az érték és referencia típusok rendezési ideje közötti különbséget vizsgálja, 20 millió adat, és a quick sort algoritmus segítségével. Egy quick sort algoritmus húszmillió elem rendezése közben átlagos esetben körülbelül kétszázötvenmillió elemmozgatást végez. Ezek alapján, 32 bites rendszernél referencia típus esetében 1 gigabyte (2 giga 64 biten) adatot kell mozgatni, még […]
Minifeladatok III.
Posted by Tóth Viktor in .NET, Minifeladat, Optimalizáció on 2012. március 17.
Az előző két minifeladat (Minifeladatok I és Minifeladatok II) az érték típusok tulajdonságairól szólt. Most az érték típusok talán legismertebb tulajdonságát vizsgáljuk meg közelebbről egy példán, mégpedig azt, hogy az érték típus reprezentációja érték szerint másolódik egyik változóról a másikra, míg a referencia típus esetében a reprezentációra egy hivatkozást tárolnak a változók, és csak a […]
A jitter és az inlining
Posted by Tóth Viktor in .NET, Optimalizáció on 2011. december 13.
Az előző cikkben az egyik mintakódban láthattuk, hogy a jitter milyen szépen inline-olta a Console.WriteLine() metódust. Kíváncsi lettem hát, hogy mi a stratégiája. Azt korábbról tudtam, hogy az egyszerű property getter/settereket binline-olja, de vajon mitől függ, hogy mivel teszi meg, és mivel nem? Itt van például a következő kód: Vajon a Calc() metódushívás be lesz […]
A szinkronizáció buktatói
Posted by Tóth Viktor in .NET, Multithreading, Optimalizáció on 2011. december 10.
Egy előző részben egy szervizt próbáltunk összerakni, ami minél több műveletet képes elvégezni egységnyi idő alatt. Ehhez szükség volt egy megfelelő adatszerkezetre, ami helyt tud állni többszálú környezetben. Mivel egy beépített adatszerkezetet használtunk (ConcurrentQueue), nem feltétlenül tudatosult, hogy nem triviális feladatról van szó. Régi, nyugodt idők Több szálnak ellenálló adatszerkezetre/algoritmusra régóta szükség van, és sokan […]
A WCF ára
Posted by Tóth Viktor in .NET, Multithreading, Optimalizáció, WCF on 2011. november 5.
Nemrég szórakozásból megvizsgáltuk, milyen nagyságrendű beömlő adatot képes lekezelni egy szerver. Ez remek alkalmat teremtett ahhoz, hogy megnézzük, mi a különbség egy WCF-re illetve mezítlábas TCP socketre épülő szerver között teljesítmény tekintetében. A feladat A tesztfeladatban a kliensek adatokkal bombázzák a szervert. Egy adat egy értékhármasból áll, ami egy nevet, egy árat, és egy timestampet […]
LINQ és a lineáris keresés
Posted by Tóth Viktor in .NET, Optimalizáció on 2011. szeptember 8.
Élő kódokban láttam több alkalommal az alábbi, nagyon pazarló eljárást. Adva van n darab objektum példányom, amivel dolgozom. Vegyünk egy egyszerű típust: A példányokat jellemzően így hordozom a programban: Hogy ez most lokális változó, vagy valamilyen osztály mezője, az teljesen mindegy. A lényeg, hogy olyan műveletet implementálok, amiben kapok egy másik listát: Esetleg: A feladatom, […]
String műveletek belülről
Posted by Tóth Viktor in .NET, Optimalizáció on 2011. augusztus 27.
A string típus egy furcsa szeglete a .NET-nek. Elvileg egyszerű dologról van szó, mégis több ökölszabály/legenda kering a témával kapcsolatban, más dolgok pedig teljesen homályosak. Kezdjük például egy egyszerű kérdéssel. Mi történik, az alábbi kódban? Itt nem az a lényeg, hogy kiírja, hogy alma. A lényeg, hogy hogyan oldódik fel az s változó? Mi történik […]
if vs. switch
Posted by Tóth Viktor in .NET, Optimalizáció on 2011. augusztus 23.
Néhány nappal ezelőtt egy kollegám említette, hogy vannak fejlesztők, akik vallási vitát képesek folytatni arról, hogy mikor melyik vezérlési szerkezetet érdemes használni. Mivel furcsa volt ez nekem, rákerestem a google-ön, és tényleg: elég sok emberben felmerül ez a kérdés. Alapvetően két részre lehet osztani a témát: Melyik vezérlési szerkezet átláthatóbb. Melyik vezérlési szerkezet rendelkezik nagyobb […]
