Archive for category Optimalizáció

C# Tech. interjú – Algoritmus javítása

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 […]

6 hozzászólás

C# Tech. interjú – nem-rekurzív könyvtárbejárás

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 […]

1 hozzászólás

Megoldás – Minifeladatok III.

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 […]

1 hozzászólás

Minifeladatok III.

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 […]

3 hozzászólás

A jitter és az inlining

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 […]

Hozzászólás

A szinkronizáció buktatói

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 […]

9 hozzászólás

A WCF ára

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 […]

10 hozzászólás

LINQ és a lineáris keresés

É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, […]

2 hozzászólás

String műveletek belülről

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 […]

8 hozzászólás

if vs. switch

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 […]

1 hozzászólás

Követés

Értesítést küldünk minden új bejegyzésről a megadott e-mail címre.

Csatlakozz a 32 követőhöz