databájt 2012.03.08. 17:10

"What ain't no country I've ever heard of."

Jó napot, jó kódolást!

A minap eszembe jutott, hogy túl sokat kerülgettem már a .NET fókaságait, így a mai topic eköré fog épülni.

Először is, elővenném kedvenc területemet, a Reflection namespace-t, amit oly sokan szidtak már az idők során a lassúsága miatt. Azok, akik hisznek a pici és puha óriás erejében, ajánlok egy oldalt tőlük, ahol megideologizálják kifejtik, hogy mikor érdemes és hogyan Reflection-t használni, hogy az gyors is legyen. Az illúzió konzerválása érdekében akkor itt abba is hagynám a helyükben az olvasást, és folytatnám a Windows 8-at népszerűsítő oldalak valamelyikével, például.

Azoknak, akik nem portugál őslakosnak születtek, akik bedőlnek a csillogó tükör ámításának, álljon itt elrettentő példaként egy kedvencem.

Ősi mantra kezdő reflektáláshoz

Mit kell tennünk, ha valami okból (pl. adatelérési rétest sütünk) elkerülhetetlenül Reflection-nel kell dolgoznunk?
Cachelni, cachelni, CACHELNI. Azért, mert egyrészt minden, egy típusról kideríthető információt nem szeretnénk újra és újra kiszámoltatni, másrészt mert esetleg építenénk köré különféle segítő classokat, stb.

Ha úgy gondoljuk, hogy ilyen mélyen belemászni a lecsóba merő időpazarlás, annak az embernek a meglepettségével fogunk szembenézni amikor ránk szakad mondjuk kétmillió hívás egy ilyen területen, aki éppen most ébredt kómásan egy sötét pincében, szájában gag-ball, kezei lánccal egy oszlophoz kötve, és két bájos, kopasz, vetkőző uriember közelít feléje.

FullName, avagy a legtriviálisabb veszteség

Azt hinné az ember, hogy ha egy fajt elneveznek, azt nagy biztonsággal lehet konstansnak venni. Mert hát ugye az se nagyon változik, hogy ki milyen nemű. Na, ez a .NET szerint nem hogy változhat, hanem rendre a Type.FullName property ki is számolja, valahányszor azt lekérdezzük. Az nem számít, hogy normális kód ugye nem változik menet közben, ergo a namespace-ek se vándorolnak délnek ha melegebb van. Az se számít, hogy az első használatnál - egye fene - legyen csak kiszámolva valami, ami kvázi-konstans, azt' egy mezőből majd előrántjuk, ha legközelebb kell, neeem.

Vessünk egy pillantást az alábbi ábrára.

WhatAintNoCountry_1.png

Igen, 9,6 másodperc színtiszta pazarlás, dobozolva.

"How much time do you want to waste today?"

Ugyanez persze, ha a mi kezünkben a varázsbot, úgy nézne ki, hogy fogunk egy egységsugarú string mezőt, beállítjuk az értékét, azt kalap.

Valahogy így:

WhatAintNoCountry_2.png

Aztán nézzük, mennyi az annyi:

WhatAintNoCountry_3.png

Vagyis 2026 ms nettó, amiből ugye lejön az egyszeri költség, 500 ms, az annyi mint 1526 ms. Kb 6,32-szeres (menedzserek: 632%) gyorsulás. Ennek az aránynak a töredékéért ölnek a tőzsdén.

Nyilván ennek is van hátránya, mert ugye azt az extra mezőt le kell tárolni, de annyi példányt tipikusan nem tartunk memóriában Type osztályból, hogy ezen múljon.

Konklúzió

  • Harmincezer, háromszázezer, vagy cache-elés.
  • .NET Type FullName property-jét tessék óvatosan kezelni (ugyanez igaz a Namespace-re is btw)
  • Soha ne bízzunk meg olyan kódban, ami képes a lényegét alkotó információt újra meg újra megkérdőjelezni

4 komment

A bejegyzés trackback címe:

https://dotnot.blog.hu/api/trackback/id/tr384297892

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

TrueY · http://qltura.blog.hu 2012.03.09. 09:26:45

Jó kis cikk. :)

Pár pici kommentecske:
"Azt hinné az ember, hogy ha egy fajt elneveznek, azt nagy biztonsággal lehet konstansnak venni."
Nagyon sűrűn sorolnak át fajokat. Főleg a molekuláris biológia új eredményeire támaszkodva. Sőt az is előfordul, hogy egy faj beleolvad egy másikba, mert nem is már faj.

"Mert hát ugye az se nagyon változik, hogy ki milyen nemű."
Manapság ez sem probléma! Már én is gyűjtöm a zsét a nővé, avagy férfivá operálásomra (kívánt rész törlendő)! ;)

"Kb 6,32-szeres (menedzserek: 632%) gyorsulás."
Mi az 1*-es gyorsulás definíciója? Az, hogy duplájára gyorsul a cucc? Ez esetben igaz, amit írtál. Ha azt jelent, hogy marad ugyanolyan gyors, akkor 532%. ;)

TrueY · http://qltura.blog.hu 2012.03.09. 09:28:03

Ja bocs, egy probléma. Nem látszik az eredeti kód! Pedig jó vó'na! :)

databájt 2012.03.09. 09:38:45

Heh, köcce. :)

A kód azért nem látszik, mert még nem tudtam rájönni, mivel lehet szélesíteni a tartalmat, hogy a képek kiférjenek, de ha letöltöd, meg tudod nézni.

Vagy valami popuppal megpróbálom majd megoldani, ez engem is zavart kezdettől fogva. Na, majd lesz valahogy, addig is, köszi, és kövesd a nyúl szagát az üregbe, lesz még folytatás. :)

databájt 2012.03.09. 10:47:35

Nya, köztes megoldás. Választottam egy eleve szélesebb sablont, azt majd kiderül.

Egyelőre csak tervezem egy saját új dizájn kialakítását, a tartalmat többre értékelem.

Keep the comments burning! :)
süti beállítások módosítása